为什么LINQPad将枚举整数值转储为字符串?

时间:2014-04-24 18:30:11

标签: c# linqpad

我正在使用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
}

enter image description here

1 个答案:

答案 0 :(得分:15)

实际上,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转储它。< / p>

我必须承认,Option[]可以投放到IEnumerable<int>时出乎意料,但似乎是这样......