C# 开启枚举

标签 c# asp.net

我有一个枚举:

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/

相关文章:

c# - 访问 TFS : API or SDK?

javascript - 如何更新位于asp.net iframe之外的ajax updatepanel

javascript - ASP.net PageMethods 返回未定义

c# - 应用栏窗口从停靠位置弹出,然后移动到停靠位置

c# - 如何通过传递某些行来读取文本文件行?

asp.net - 动态表,我可以在其中单击链接并获取上下文信息

c# - 最后一个操作事件在返回单击时被触发

c# - 如何防止 Syncfusion ASP.Net Webforms Grid 中的过滤器文本框发送服务器端请求?

c# - 以编程方式测试 SQL Server 连接的最佳方法是什么?

c# - 带有 Oracle 的 EntityFramework 6 : Is there a "standalone" ODAC (i. e。没有 ODBC),并且每台客户端 PC 都需要安装它吗?