考虑以下枚举和该类型的相应可空字段
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呢?任何性能提升或其他优势?
Dar*_*rov 11
根据文件:
枚举元素的默认基础类型是int.默认情况下,第一个枚举数的值为0,每个连续枚举数的值增加1.
...
枚举E的默认值是表达式(E)0产生的值.
还可以修改此默认值:
enum PossibleOptions { Unspecified = 1, One, Two }
Run Code Online (Sandbox Code Playgroud)
在这种情况下,Unspecified将不再是默认值.
我可以看到使用可空的枚举的唯一可能的优点是null值将不依赖于枚举的定义.
在我看来,你应该决定使用哪一个取决于你是否需要默认值或未赋值的语义.