所以目前有一个枚举用于应用程序的状态。然而,当使用它来对抗ui时会感觉不舒服。填充下拉列表时,对于整数和字符串之间的许多转换。我可以使用扩展方法或类型转换器并继续使用枚举,如果枚举中有多个单词,这将是有用的。
在我深入挖掘它之前,我想要考虑填写一个可能的洞。
感谢。
答案 0 :(得分:14)
我的团队在我们最近的项目中遇到了这个问题。我们保留了枚举,因为它们是用于已知常量值的有限列表的东西,但我们做了一些事情来使它们更适合开发人员:
所以,鉴于以下内容:
public enum MyItems
{
[Description("Item One")]
ItemOne,
[Description("Item Two")]
ItemTwo,
[Description("Item Three")]
ItemThree
}
我们可以用两行中的用户友好选项填充DropDownList:
foreach(MyValues value in Enum.GetValues<MyValues>())
myDDL.Items.Add(New ListItem(value.GetDescription(), value.ToString())
...然后我们可以用非常易读的代码解析选择:
var theValue = myDDL.SelectedItem.Value.ParseEnum<MyValues>()
编辑:我被要求使用GetDescription()方法。关于共享整个事情,我有点不确定,但这里是获取一个描述属性来装饰枚举常量的基本算法。解析一个CamelCased名称是非常简单的RegEx拆分大写字母,无论如何我们的实现有点天真。此代码段需要System.ComponentModel.DescriptionAttribute(它也是枚举常量的装饰器),而enumType是扩展方法的“this”参数,类型为Enum:
var attr = enumType.GetType().GetField(enumType.ToString())
.GetCustomAttributes(typeof(DescriptionAttribute), false);
if (attr.Length > 0)
return ((DescriptionAttribute)attr[0]).Description;
答案 1 :(得分:5)
如果您正在使用具有有限且众所周知的可能状态数的变量,那么枚举确实是您使用的正确构造。有许多方法可以更方便地使用UI,你引用了两个很好的方法,它们是类型转换器和扩展方法。
答案 2 :(得分:0)
Enum like constru绝对是正确的选择。如果由于某种原因你不想使用熟悉的内置方式,你可以让你拥有一个更实用的bir。这是基本的想法:
class Country {
private static Country US;
private static Country JP
static Country() { //initialize static variables }
private Country( string name ) { //initialize variables of Country instance }
}
这有一种设计模式,但我忘了这个名字。