如何在枚举类型中设置间隔
问题的原因是许多人仍然在处理枚举时遇到问题。为了解决这个问题,根据Smac的建议,我添加了一个扩展方法,以便更加方便。我使用了注解和一个辅助的扩展方法。
首先,定义了一个枚举TravelClass,其中包含了两个枚举值:EconomyWithRestrictions和EconomyWithoutRestrictions。每个枚举值都使用了Description属性进行注解,分别为"Economy With Restrictions"和"Economy Without Restrictions"。
接下来,定义了一个静态类Extensions,其中包含了一个扩展方法ToDescription,用于将枚举值转换为对应的描述字符串。在该方法中,首先通过反射获取枚举值对应的字段,然后使用Attribute.GetCustomAttribute方法获取该字段上的DescriptionAttribute注解,最后返回注解的Description属性值。如果没有找到DescriptionAttribute注解,则返回枚举值的字符串表示。
最后,给出了一个使用枚举的示例。在示例中,将TravelClass.EconomyWithRestrictions赋值给枚举变量enumValue,然后调用ToDescription方法将其转换为描述字符串,将结果赋值给字符串变量stringValue。结果将返回"Economy With Restrictions"。
希望这个完整的示例对大家有所帮助。再次感谢Smac提出的建议,我只是通过添加扩展方法来完善它。
枚举(Enum)是用于编程目的的,实质上是给一个数字起了一个名字。这对程序员在阅读源代码时很有帮助。
status = StatusLevel.CRITICAL; // 这种写法更容易阅读... status = 5; // ...比这种写法
枚举不是用于显示的,不应该展示给最终用户。与任何其他变量一样,枚举名称中不能使用空格。
要将内部值与用户可以显示的“漂亮”标签关联起来,可以使用字典或哈希表。
myDict["Bad Boy"] = "joe blow";
在我定义的枚举“Good_Boy”中,我想在控件上用空格替换下划线,应该如何做?
不要在用户可以看到的地方使用枚举名称。正如之前所说,请使用字典。这就是它们的用途。枚举用于编程级别的统一,而不是用户显示!
事实上,下拉框的数据源通常不是在数据库中定义的,而是来自枚举。我不确定这是否是一件坏事。
如何在枚举中设置空格的问题是由于在UI框架中使用枚举时,希望能够通过DataAnnotations为枚举值设置空格的显示名称。解决方法是使用DataAnnotations特性来装饰枚举值,并通过自定义的扩展方法将枚举值和显示名称以字典的形式返回。
在上述代码中,我们可以看到在枚举类型Boys中,使用了Display特性来为GoodBoy和BadBoy设置了显示名称。这样在UI框架中使用HTML.LabelFor时,可以读取DataAnnotations特性,并显示出设置的名称。
为了在代码中获取枚举值和显示名称,我们可以使用一个名为EnumExtention的扩展方法。这个方法会接收一个Enum类型的参数,并通过反射获取枚举类型的字段,筛选出带有Display特性的字段,并获取其名称。然后通过Enum.GetValues方法获取枚举值,最后使用Zip方法将名称和值一一对应,并以字典的形式返回。
使用这个扩展方法时,只需要调用Boys.GoodBoy.ToDictionary()即可获取包含了枚举值和显示名称的字典。
需要注意的是,在使用DataAnnotations特性时,需要引用System.ComponentModel.DataAnnotations命名空间。
总结起来,当在使用UI框架中的枚举时,希望能够为枚举值设置显示名称时,可以通过DataAnnotations特性和自定义的扩展方法来实现。