Aur*_*Aur 10 c# enums design-patterns
所以目前有一个枚举用于应用程序的状态.然而,当使用它来对抗ui时感觉不舒服.填充下拉列表时,对于整数和字符串之间的许多转换.我可以使用扩展方法或类型转换器并继续使用枚举,如果枚举中有多个单词,这将是有用的.
我以为在挖到深处之前我会要求看到填充可能的洞.
谢谢.
Kei*_*thS 14
我的团队在最近的项目中遇到了这个问题.我们保留了枚举,因为它们是用于已知常量值的有限列表的东西,但是我们做了一些事情来使它们更适合开发人员:
所以,鉴于以下内容:
public enum MyItems
{
[Description("Item One")]
ItemOne,
[Description("Item Two")]
ItemTwo,
[Description("Item Three")]
ItemThree
}
Run Code Online (Sandbox Code Playgroud)
我们可以用两行中的用户友好选项填充DropDownList:
foreach(MyValues value in Enum.GetValues<MyValues>())
myDDL.Items.Add(New ListItem(value.GetDescription(), value.ToString())
Run Code Online (Sandbox Code Playgroud)
...然后我们可以用非常易读的代码解析选择:
var theValue = myDDL.SelectedItem.Value.ParseEnum<MyValues>()
Run Code Online (Sandbox Code Playgroud)
编辑:我被要求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;
Run Code Online (Sandbox Code Playgroud)