C# 字典、枚举或其他在MVC中实现任务优先级的替代方案?

C# 字典、枚举或其他在MVC中实现任务优先级的替代方案?,c#,model-view-controller,dictionary,enums,C#,Model View Controller,Dictionary,Enums,我的数据库中有一个任务表,其中的优先级字段包含一个从1到4的整数值作为测试。我使用的是LINQ to SQL dbml文件,因此我有一个任务类,我希望能够在视图中向用户显示优先级的文本值,作为选择列表中的值 我已将以下代码添加到我的任务类中: static enum Priorities { High = 1, Medium = 2, Low = 3, None = 4 } public String Ge

我的数据库中有一个任务表,其中的优先级字段包含一个从1到4的整数值作为测试。我使用的是LINQ to SQL dbml文件,因此我有一个任务类,我希望能够在视图中向用户显示优先级的文本值,作为选择列表中的值

我已将以下代码添加到我的任务类中:

    static enum Priorities {
        High = 1,
        Medium = 2,
        Low = 3,
        None = 4
    }

    public String GetPriority {
        get {
            Priorities p = (Priorities)priority;
            return p.ToString();
        }
    }
我想在下拉列表中使用优先级,但我不确定如何做到这一点,首先获取要放入选择列表的值列表,然后为任务对象选择正确的值:(

我想改为做下面的事情并使用字典,但如果有人有一些建议或更好的解决方案,那将非常有用,谢谢

        static IDictionary<string, int> priorityDictionary =
      new Dictionary<string, int>(){
    {"High", 1},
    {"Medium", 2},
    {"Low", 3},
    {"None", 4}
  };

    public static IEnumerable<string> Priorities {
        get { return priorityDictionary.Keys; }
    }
静态IDictionary优先词典=
新字典(){
{“高”,1},
{“中等”,2},
{“低”,3},
{“无”,4}
};
公共部门有无数的优先事项{
获取{return priorityDictionary.Keys;}
}

既然最终您需要将其作为一个
IEnumerable
,为什么不创建一个延迟加载的静态属性,将其作为菜单包含

private static List<SelectListItem> priorities;
public static IEnumerable<SelectListItem> PriorityMenu
{
    get
    {
         if (priorities == null)
         {
             priorities = new List<SelectListItem>();
             foreach (var i in Enum.GetValues(typeof(Priority)))
             {
                 priorities.Add( new SelectListItem
                                 {
                                     Text = Enum.GetName( typeof(Priority), i ),
                                     Value = i.ToString()
                                 });
             }
         }
         return priorities;
    }
}
私有静态列表优先级;
公共静态IEnumerable PriorityMenu
{
得到
{
if(优先级==null)
{
优先级=新列表();
foreach(Enum.GetValues中的变量i(typeof(Priority)))
{
优先级。添加(新的SelectListItem
{
Text=Enum.GetName(typeof(Priority),i),
Value=i.ToString()
});
}
}
返回优先事项;
}
}

如果您希望字符串表示形式与Enum.GetName不同,同时仍保持类型安全,请查看:

谢谢您的回答。看起来很优雅,我从刚刚看到它中学到了很多。由于我的Enum称为Priorities,我将typeof(Priority)更改为typeof(Priorities)但除此之外,这是获取selectlistitems列表的一个很好的解决方案。我不知道您可以使用枚举类静态方法。我的一个问题是,如何在dropdownlist html帮助程序中使用该列表?它似乎调用了ToString()在列表中的每个项目上,但由于它们是SelectListItem的,所以它只给出了对象的名称。再次感谢。不要介意我试图创建一个selectlist对象作为我的viewmodel类的属性,但是Html。Dropdownlist使用SelectListItem的IEnumerable,而selectlist没有,因此我可以传递上述方法的结果。