可以为空的枚举或其他元素

alw*_*ing 8 .net c#

考虑以下枚举和该类型的相应可空字段

enum PossibleOptions { One, Two }

PossibleOptions? option;
Run Code Online (Sandbox Code Playgroud)

或者,我可以将枚举和相应的字段声明为

enum PossibleOptions { Unspecified, One, Two }

PossibleOptions option;
Run Code Online (Sandbox Code Playgroud)

这个不可为空的字段将被初始化为第一个值,即'Unspecified',并且我实现了与可空('Unspecified'将替换option.HasValue)相同的结果.

为什么选择Nullable呢?任何性能提升或其他优势?

Ode*_*ded 14

我知道你在询问有关可以为空的枚举的原因,但我个人认为没有理由使用它们.

在我看来,具有"无效"成员的枚举更具可读性,并且传达的意义远远超过可空.


Dar*_*rov 11

根据文件:

枚举元素的默认基础类型是int.默认情况下,第一个枚举数的值为0,每个连续枚举数的值增加1.

...

枚举E的默认值是表达式(E)0产生的值.

还可以修改此默认值:

enum PossibleOptions { Unspecified = 1, One, Two }
Run Code Online (Sandbox Code Playgroud)

在这种情况下,Unspecified将不再是默认值.

我可以看到使用可空的枚举的唯一可能的优点是null值将不依赖于枚举的定义.

在我看来,你应该决定使用哪一个取决于你是否需要默认值或未赋值的语义.