我使用LinqPad测试了一些Enum函数,但没有得到像使用.Dump()时那样的整数。为什么ToList()解决了这个问题?

void Main()
{
    Enum.GetValues(typeof(Options)).Cast<int>().Dump();
    Enum.GetValues(typeof(Options)).Cast<int>().ToList().Dump();
}

public enum  Options
{
   Equal,
   LessThan,
   GreaterThan
}

最佳答案

实际上,LINQPad不是这里的罪魁祸首。这是由于 Enumerable.Cast 中的优化:

    public static IEnumerable<TResult> Cast<TResult>(this IEnumerable source) {
        IEnumerable<TResult> typedSource = source as IEnumerable<TResult>;
        if (typedSource != null) return typedSource;
        if (source == null) throw Error.ArgumentNull("source");
        return CastIterator<TResult>(source);
    }

如您所见,如果source实现IEnumerable<TResult>,那么Cast只会返回原样。在这种情况下,source的类型为Option[],它恰好实现了IEnumerable<int>,因此Cast返回一个Option数组,然后LINQPad对其进行转储。

我必须承认,惊讶的是Option[]可以强制转换为IEnumerable<int>,但这似乎是事实。

关于c# - LINQPad为什么将枚举整数值作为字符串转储?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23276970/

10-11 13:19