除了enum之外还有什么用于c#

所以目前有一个枚举用于应用程序的状态。 然而,当使用它来对抗ui时会感觉不到。 填充下拉列表时,对于整数和字符串之间的许多转换。 我可以使用扩展方法或类型转换器并继续使用枚举,如果枚举中有多个单词,这将是有用的。

我以为在挖到它之前我会要求看到填充可能的洞。

谢谢。

如果您正在使用具有有限且众所周知的可能状态数的变量,那么枚举确实是您使用的正确构造。 有许多可能的方法可以更方便地使用UI,并且您引用了两个优秀的方法,即类型转换器和扩展方法。

我的团队在最近的项目中遇到了这个问题。 我们保留了枚举,​​因为它们是用于已知常量值的有限列表的东西,但我们做了一些事情来使它们更适合开发人员:

  1. 我们用[Description()]属性修饰了枚举值,这些属性包含每个枚举常量的“友好名称”。
  2. 我们创建了一个GetDescription()扩展方法,它可以reflection检查枚举常量的Description属性并返回友好名称。 如果它没有,则该方法尝试将空格插入枚举常量名称的ToString()中。 由于CamelCased枚举常量是ReSharper强制执行的样式要求,因此大约90%的常量都有效,而Description属性处理其余的(名称中大多数是大写的首字母缩略词)。
  3. 我们为字符串创建了一个ParseEnum()generics扩展方法,它基本上包装了Enum.Parse()(这是oogly;需要在方法中指定Enum类型然后转换为它)。 我认为首先尝试查找描述属性可能足够聪明,否则我们只是使用仍然可读的ToString()表示作为下拉项的数据值。

因此,给出以下内容:

public enum MyItems { [Description("Item One")] ItemOne, [Description("Item Two")] ItemTwo, [Description("Item Three")] ItemThree } 

我们可以用两行中的用户友好选项填充DropDownList:

 foreach(MyValues value in Enum.GetValues()) myDDL.Items.Add(New ListItem(value.GetDescription(), value.ToString()) 

…然后我们可以用非常易读的代码解析选择:

 var theValue = myDDL.SelectedItem.Value.ParseEnum() 

编辑:我被要求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; 

Enum like构造绝对是正确的选择。 如果由于某种原因你不想使用熟悉的内置方式,你可以让你拥有一个更实用的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 } } 

有一个设计模式,但我忘记了名字。