为什么 C# 允许无效的枚举值

问题描述 投票:0回答:1

我花了一段时间试图理解为什么我的 WPF 应用程序没有正确地将数据绑定到枚举属性,这就是原因。

 static void Main(string[] args)
 {
  MyEnum x = 0;
  Console.WriteLine(x.ToString());
  Console.ReadLine();
 }

 public enum MyEnum
 {
  First = 1,
  Second = 2
 }

本质上,问题在于我绑定的类的构造函数中没有为枚举属性设置默认值,因此它默认为零。

我可以通过某种方式告诉 C# 编译器我希望它只接受有效值(并且默认为最低值)吗? 我不希望我的属性接受无效值,并且我不想为每个使用枚举的属性编写 setter 代码。

c# enums
1个回答
11
投票

不,不幸的是没有。

C# 枚举实际上只是命名的数字 - 根本没有验证。我同意看到这一点以及具有行为的枚举(如 Java 中的枚举)会非常高兴。不过,我还没有听到任何消息表明它很快就会推出:(

请注意,类型的默认值始终是由“全零位”表示的值 - 实际上,在类型系统中没有办法绕过它。因此,要么您需要将其设置为合理的默认值,要么即使在验证系统中也必须对其进行显式测试(例如针对引用类型的 null 进行测试)。

需要明确的是,我相信有时使用“数字名称”类型是有意义的......但我认为一组真正受限的值会更有用。

© www.soinside.com 2019 - 2024. All rights reserved.