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

时间:2011-02-17 09:02:22

标签: c# .net enums

public enum Animal
{
    Dog = 1,
    Cat = 2,
    Cow = 3
}

int animalID = 4;
if ((Animal)animalID == Animal.Dog) // does not throw exception

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

2 个答案:

答案 0 :(得分:11)

因为它不是无效的演员。

您投射的值是超出范围的枚举(在本例中),但它并非无效。

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

Source - MSDN

答案 1 :(得分:1)

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

不过,这是一个骗局 Casting an out-of-range number to an enum in C# does not produce an exception

可能会有更多答案:)