我今天遇到了这个问题,我不明白发生了什么:
enum Foo
{
Zero,
One,
Two
}
void Main()
{
IEnumerable<Foo> a = new Foo[]{ Foo.Zero, Foo.One, Foo.Two};
IEnumerable<Foo> b = a.ToList();
PrintGeneric(a.Cast<int>());
PrintGeneric(b.Cast<int>());
Print(a.Cast<int>());
Print(b.Cast<int>());
}
public static void PrintGeneric<T>(IEnumerable<T> values){
foreach(T value in values){
Console.WriteLine(value);
}
}
public static void Print(IEnumerable values){
foreach(object value in values){
Console.WriteLine(value);
}
}
输出:
0
1
2
0
1
2
Zero
One
Two
0
1
2
我知道 Cast() 会导致延迟执行,但它看起来像将其转换为 IEnumerable 会导致延迟执行丢失,并且只有在实际实现集合是数组的情况下。
为什么方法中值的枚举Print
导致enum
被强制转换int
为List<Foo>
集合,而不是Foo[]
?