C#枚举是类型安全的吗
本文关键字:类型安全 枚举 | 更新日期: 2023-09-27 17:47:47
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#枚举是类型安全的,意味着
- 不能从基础类型隐式转换为实际枚举
- 此外,即使两个枚举的基本类型相同,也不能将一个枚举的值分配给另一个枚举。始终需要显式强制转换
- 枚举使代码更具可读性和可维护性
我偶然看到了一个关于枚举的优秀视频教程,它说明了枚举的类型安全性。到处看看。