繁体   English   中英

C# 枚举类型安全吗?

[英]Are C# enums typesafe?

C# 枚举类型安全吗?

如果不是,有什么影响?

为了给出稍微不同的答案......虽然从投射角度看这些值是类型安全的,但是一旦它们被投射,它们仍然是未经检查的 - 即

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#枚举是类型安全的含义

  1. 您不能隐式地从基础类型转换为实际的枚举
  2. 此外,即使两个枚举的基础类型相同,也不能将一个枚举的值分配给另一个枚举。 始终需要显式强制转换。
  3. 枚举使您的代码更具可读性和可维护性。

我已经通过一个关于枚举的优秀视频教程来探索他们的类型安全性。 看看这里那里

是的,他们是

枚举是强类型常量。 它们本质上是唯一的类型,允许您将符号名称分配给整数值。 在C#传统中,它们是强类型的,这意味着即使其成员的基础值相同,也不能将一种类型的枚举隐式赋值给另一种类型的枚举。 同样,整体类型和枚举也不是隐含地可互换的。 不同枚举类型和整数类型之间的所有赋值都需要显式强制转换。

是。

C#:枚举类型:

- 命名值的类型安全枚举。

- 防止编程错误

-User可以控制底层类型(默认为int)

- 也可以控制基础价值

技术上没有,因为你可以将Enum表示为其基值(int,long等)。 但是,如果确保仅使用其提供的名称使用枚举,则在未更新其引用的情况下更改枚举值的名称时,将收到编译时错误。 在这方面是的,它是类型安全的。

我在这里参加派对的时间已经很晚了,但是我想再多花点一些东西了...来自Krzysztof Cwalina的.NET Framework设计指南的更新。 除了检查以确保将有效值传递给您的Enums上面的优秀提示之外,这还提供了有关如何有效使用它们的一些指导和建议,一堆陷阱(特别是涉及Flags枚举)等。

是的,他们是强类型的安全你不能不做impilcit转换枚举常量变量到整数值u hv 2 expilcitly do dat例如enum days {sun,mon} int e =(int)days.sun; console.writeline(E);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM