我使用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/