我有一个枚举:
public enum Status
{
Incomplete = 1, Complete = 2, Cancelled = 3, Deleted = 4
}
现在在某个页面上,我希望在复选框列表中列出此枚举。这很好,除了我希望每个复选框的文本显示与枚举不同的文本。
即复选框应显示:
“未处理”而不是“未完成”
“已处理”而不是“完成”
“作废”而不是“取消”
是否可以将此枚举放在 foreach 中,然后打开状态并更新文本。像这样:
var statuses = Enum.GetNames(typeof(Status));
foreach (var status in statuses)))
{
switch (status)
{
case Status.Complete.ToString():
status = "Processed";
break; ...etc
}
}
任何想法将不胜感激。
最佳答案
C# 具有直接解决您的问题的语言功能。 Here's an article为您提供完整的详细信息。
简短版本:将扩展属性值应用于每个值:
enum OrderStatus
{
[EnumValueData(Name="New Order")]
NewOrder = 1,
[EnumValueData(Name="In Process")]
Processing = 2,
[EnumValueData(Name="Shipped")]
Shipped = 3
}
然后将上述值应用到您的单选按钮、列表框或其他任何东西:
public static Dictionary<int, string> GetListItems(Type enumType)
{
if (!enumType.IsEnum)
throw new ApplicationException("GetListItems does not support non-enum types");
Dictionary<int, string> list = new Dictionary<int, string>();
foreach(FieldInfo field in enumType.GetFields(BindingFlags.Static | BindingFlags.GetField | BindingFlags.Public))
{
int value;
string display;
value = (int)field.GetValue(null);
display = Enum.GetName(enumType, value);
foreach(Attribute currAttr in field.GetCustomAttributes(true))
{
EnumValueDataAttribute valueAttribute = currAttr as EnumValueDataAttribute;
if (valueAttribute != null)
display = valueAttribute.Name;
}
list.Add(value, display);
}
return list;
}
关于C# 开启枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3166172/