题
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
}
出于这个原因,您应该注意检查值 - 例如,在 switch
中抛出异常的 default
。
您还可以通过以下方式检查(非 [Flags]
值):
bool isValid = Enum.IsDefined(typeof(Foo), foo);
击> <击> 撞击>
其他提示
是的。
以下内容来自 http://www.csharp-station.com/Tutorials /Lesson17.aspx
枚举是强类型常量。它们本质上是唯一的类型,允许您将符号名称分配给整数值。在C#传统中,它们是强类型的,这意味着即使其成员的基础值相同,也不能将一种类型的枚举隐式赋值给另一种类型的枚举。同样,整体类型和枚举也不是隐含地可互换的。不同枚举类型和整数类型之间的所有赋值都需要显式转换。
对于那些建议使用Enum.IsDefined进行参数验证的人......不要! Per Brad Abrams(来自 Enum Design的框架设计指南更新):
Enum.IsDefined()确实存在两个问题。首先,它加载反射和一堆冷类型元数据,使其成为一个看似昂贵的电话。其次,正如该说明所暗示的那样存在版本问题。
枚举是强类型常量。 它们本质上是独特的类型 允许您为其分配符号名称 积分值。在C#传统中, 它们是强类型的,意思是 一种类型的枚举可能不是 隐式分配给枚举 另一种类型即使是 其成员的潜在价值是 相同。沿着同样的路线, 积分类型和枚举不是 隐含地可互换。所有 不同枚举之间的分配 类型和整体类型需要一个 显性演员。
是
C#:枚举类型:
- 命名值的类型安全枚举。
- 防止编程错误
-User可以控制底层类型(默认为int)
- 也可以控制基础值
技术上没有,因为你可以将Enum表示为其基值(int,long等)。但是,如果确保仅使用其提供的名称使用枚举,则在未更新其引用的情况下更改枚举值的名称时,将收到编译时错误。在这方面,是的,它是类型安全的。
我来这里参加派对的时间很晚,但是我想再多点一些...... .NET Framework设计指南。除了检查以确保将有效值传递给您的Enums上面的优秀提示之外,这还为如何有效地使用它们提供了其他指导和建议,一堆陷阱(特别是涉及 Flags
枚举)等等。
是的,他们r强类型安全你不能不做impilcit转换枚举常量变量到整数值u hv 2 expilcitly do dat 例如 enum days { 太阳, 周一 } int e =(int)days.sun; console.writeline(E);