将枚举转换为整数失败时,为什么不能获得InvalidCastException?

public enum Animal { Dog = 1, Cat = 2, Cow = 3 } int animalID = 4; if ((Animal)animalID == Animal.Dog) // does not throw exception 

animalID无法投放到Animal
将枚举InvalidCastException为整数失败时,为什么不能获得InvalidCastException

因为它不是无效的演员。

输出的值超出了枚举的范围 (在本例中),但它不是无效的。

由于枚举的已批准类型是byte,sbyte,short,ushort,int,uint,long或ulong,从整数到枚举的强制转换是完全合法的。

来源 – MSDN

这是一种预期的行为,可能非常有用。 考虑使用[Flag]属性定义的枚举。

顺便说一句,这是在C#中将一个超出范围的数字转换为枚举的欺骗行为不会产生exception

更多答案可能在那里:)