【发布时间】:2018-01-09 15:57:33
【问题描述】:
我很惊讶,但枚举可以使用 C# 中的构造函数创建。 例如,我有枚举:
public enum Color
{
White = 1,
Red = 2
}
然后可以这样创建:
var color = new Color();
而且值会是0,实际上不是有效的枚举值。
那么,我们能以某种方式禁止枚举构造函数吗?任何其他想法如何避免这种情况?
谢谢。
【问题讨论】:
-
var color = (Color)125;也是完全合法的。读取枚举变量时必须手动检查值是否有效... -
见msdn.microsoft.com/en-us/library/ms182149.aspx 为什么需要给非标志枚举赋值?
-
0 是任何值类型的默认值,无论它是否有效且无法更改。你用枚举做什么?也许如果我们有更多的上下文,我们可以提出一个替代方案。
-
作为解决此问题的一种 hacky 方法,您可以使用代码分析器来获取 Enum 构造函数的错误
-
你不能用枚举做到这一点,但你可以创建自己的自定义类(“类型安全枚举”)并限制其可能的值。