C# · 12月 29, 2021

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

我花了一段时间试图理解为什么我的 WPF应用程序不是数据绑定到一个枚举属性,这是原因. static void Main(string[] args) { MyEnum x = 0; Console.WriteLine(x.ToString()); Console.ReadLine(); } public enum MyEnum { First = 1,Second = 2 }

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

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

解决方法 不,不幸的是没有.

C#枚举只是命名的数字,真的 – 根本没有验证.我同意看到这一点,以及行为枚举(如在Java中)是非常好的.我没有听到任何建议即将到来的任何时间

请注意,类型的默认值将始终是由“全零位”表示的值 – 真的没有办法在类型系统内完成.因此,您需要确定一个明智的默认值,否则即使在一个有效的系统中也需要对其进行明确的测试(比如针对引用类型的null进行测试).

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