C#enums类型是否安全?
如果没有意义?
为了给出稍微不同的答案......虽然从投射角度看这些值是类型安全的,但是一旦它们被投射它们仍然是未经检查的 - 即
enum Foo { A = 1, B = 2, C = 3 } static void Main() { Foo foo = (Foo)500; // works fine Console.WriteLine(foo); // also fine - shows 500 }
因此,您应该注意检查值 - 例如,default
在a switch
中抛出异常.
您还可以通过以下方式检查(对于非[Flags]
值):
bool isValid = Enum.IsDefined(typeof(Foo), foo);
对,他们是.
以下内容来自http://www.csharp-station.com/Tutorials/Lesson17.aspx
枚举是强类型常量.它们本质上是唯一的类型,允许您将符号名称分配给整数值.在C#传统中,它们是强类型的,这意味着即使其成员的基础值相同,也不能将一种类型的枚举隐式赋值给另一种类型的枚举.同样,整体类型和枚举也不是隐含地可互换的.不同枚举类型和整数类型之间的所有赋值都需要显式强制转换.