我正在使用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
}
Run Code Online (Sandbox Code Playgroud)

Tho*_*que 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);
}
Run Code Online (Sandbox Code Playgroud)
如您所见,如果是sourceimplements IEnumerable<TResult>,Cast则只返回源不变.在这种情况下,source是类型Option[],碰巧实现IEnumerable<int>,所以Cast返回一个数组Option,LINQPad转储它.
我必须承认,它Option[]可以被投射到一个惊喜IEnumerable<int>,但似乎是这样的......