C#枚举是类型安全的吗

本文关键字:类型安全 枚举 | 更新日期: 2023-09-27 17:47:47

C#枚举是类型安全的吗?

如果没有,会产生什么影响?

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执行参数验证。。。不要!根据Brad Abrams(来自Enum设计的框架设计指南更新):

Enum确实存在两个问题。IsDefined()。首先,它加载反射和一堆冷类型元数据,使其成为一个看似昂贵的调用。其次,正如注释所暗示的,这里存在版本控制问题。

是。

C#:枚举类型:

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

-防止编程错误

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

-还可以控制基础值

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

我来这里参加聚会迟到了,但我想扔一些额外的东西。。。的更新。NET框架设计指南。除了上面关于检查以确保将有效值传递给枚举的精彩提示外,这还为如何有效使用它们、一堆gotcha(尤其是涉及的Flags枚举)等提供了其他指导和建议。

是的,它们是强类型的安全的,u不能它不将枚举常量变量转换为整数u hv 2 expilcity do dat例如枚举天数{星期日星期一}int e=(int)天.sun;console.writeline(e);

C#枚举是类型安全的,意味着

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

我偶然看到了一个关于枚举的优秀视频教程,它说明了枚举的类型安全性。到处看看。

相关文章: