鉴于此代码:Enum.GetValues(typeof运算(....))不返回正确的枚举值
public enum Enum1
{
ONE,
TWO
}
public enum Enum2
{
A,
B
}
此代码返回ONE,TWO:
foreach (Enum1 e in Enum.GetValues(typeof(Enum1)))
{
Console.WriteLine(e);
}
但是这个代码,而不是失败(因为Enum2 e
与typeof(Enum1)
使用),返回A,B:
foreach (Enum2 e in Enum.GetValues(typeof(Enum1)))
{
Console.WriteLine(e);
}
这是为什么?
当然他们做...愚蠢的我!我忘记了在C#中枚举实际上是奇特的整数。我更习惯于Java的枚举,它们是完全成熟的类。悲伤的是,编译器没有抓住它,虽然... – JohnDoDo 2012-02-17 16:16:45
@JohnDoDo:编译器没有抓住它,因为“foreach(Enum2 e ...”做**明确的**转换 - 一个演员,有效地 - 从集合类型为循环变量类型,它对* cast *'(Enum2)enum1'是合法的,因此用* foreach *隐式地做同样的事情是合法的。记住,foreach是在泛型之前发明的;如果你有一个ArrayList的字符串,你希望能够说'foreach(myArrayList中的字符串s)'并且自动进行显式转换 – 2012-02-17 16:42:47