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

时间:2010-09-21 10:46:14

标签: c# compiler-construction enums

我花了一些时间试图理解为什么我的WPF应用程序没有属性地枚举到枚举属性,这就是原因。

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

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

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

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

1 个答案:

答案 0 :(得分:10)

不,不幸的是没有。

C#枚举只是命名数字,真的 - 根本没有验证。我同意看到这个以及带有行为的枚举(如Java)会很高兴。我没有听到任何暗示它即将到来的事情:(

请注意,类型的默认值将始终是“所有零位”所表示的值 - 实际上,无法在类型系统中找到它。因此,您需要将其设置为合理的默认值,或者即使在验证系统中也必须明确地对其进行测试(例如对参考类型进行null测试)。

为了清楚起见,我相信有时候让“数字名称”类型有意义......但我认为真正受限制的价值观会更有用。