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

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

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

本质上,问题在于我绑定(bind)到的类的构造函数中没有为 enum 属性设置默认值,所以它默认为零。

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

最佳答案

不,不幸的是没有。

C# 枚举只是命名数字,真的 - 根本没有验证。我同意很高兴看到这一点,以及具有行为的枚举(如在 Java 中)。我还没有听到任何迹象表明它很快就会到来:(

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

为了清楚起见,我相信有时使用“数字名称”类型是有意义的……但我认为一组真正受限制的值会更有用。

关于c# - 为什么 C# 允许无效的枚举值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3759518/

10-16 11:23