public enum Animal
{
Dog = 1,
Cat = 2,
Cow = 3
}
int animalID = 4;
if ((Animal)animalID == Animal.Dog) // does not throw exception
animalID无法投放到Animal
将枚举转换为整数时,为什么不能获得InvalidCastException
?
答案 0 :(得分:11)
因为它不是无效的演员。
您投射的值是超出范围的枚举(在本例中),但它并非无效。
由于枚举的已批准类型是byte,sbyte,short,ushort,int,uint,long或ulong,从整数到枚举的强制转换是完全合法的。
答案 1 :(得分:1)
这是一种预期的行为,非常有用。考虑使用[Flag]属性定义的枚举。
不过,这是一个骗局 Casting an out-of-range number to an enum in C# does not produce an exception可能会有更多答案:)