一个枚举变量,有人知道它是否总是默认为第一个元素吗?

推荐答案

它是表示值0的任何枚举成员.具体地说,从documentation:

An enum E的默认值是由表达式(E)0产生的值.

以下面的枚举为例:

enum E
{
    Foo, Bar, Baz, Quux
}

在不覆盖默认值的情况下,printing default(E)返回Foo,因为它是第一个出现的元素.

然而,枚举的0由第一个成员表示的情况是not always.例如,如果您这样做:

enum F
{
    // Give each element a custom value
    Foo = 1, Bar = 2, Baz = 3, Quux = 0
}

打印default(F)会得到Quux,而不是Foo.

如果枚举G中的任何元素都不对应于0:

enum G
{
    Foo = 1, Bar = 2, Baz = 3, Quux = 4
}

default(G)从字面上返回0,尽管它的类型仍然是G(正如上面的文档所引用的,是对给定枚举类型的强制转换).

.net相关问答推荐

无法在Designer、VS2022、. NET 8中打开WinForms表单'

在计算Total毫秒时,.NET TimeSpan类中是否存在错误?

使用 MassTransit、.NET Core 和 RabbitMQ 的设计挑战

查找 2 个已知值之间的字符串

CurrentCulture、InvariantCulture、CurrentUICulture 和 InstalledUICulture 之间的区别

为什么 C# 不允许像 C++ 这样的非成员函数

将客户端证书添加到 .NET Core HttpClient

发布版本中的 Debug.WriteLine

有什么方法可以在不重新编译的情况下覆盖 .NET Windows 服务名称?

C# 中基于接口编程的运算符重载

无法加载文件或程序集'System.ComponentModel.Annotations,版本 = 4.1.0.0

String 是原始类型吗?

在 .NET 中填充整数列表

形成两个列表并集的最简单方法

覆盖 ASP.NET MVC 中的授权属性

Moq - 不可覆盖的成员不能用于设置/验证表达式

.Net 中 AOP 的最佳实现是什么?

beforefieldinit 标志有什么作用?

判断 .NET 中的目录和文件写入权限

接口属性的 XML 序列化