我使用 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 http://referencesource.microsoft.com/#System.Core/System/Linq/Enumerable.cs#27bb217a6d5457ec:
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>
, then Cast
只是返回源不变。在这种情况下,source
属于类型Option[]
,这恰好实现了IEnumerable<int>
, so Cast
返回一个数组Option
,然后 LINQPad 转储它。
我必须承认,这让我感到惊讶Option[]
可以投射到IEnumerable<int>
,不过好像确实是这样……
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)