如何使用枚举作为字典的值?

时间:2015-05-26 10:00:15

标签: c# .net vb.net dictionary enums

下一步有什么办法,参见示例:

我对过滤器进行了枚举:

enum SearchFilters
{   
      Id,
      ItemsPerPage
};

enum ReportFilters
{
     Name,
     Age
};

用页面枚举:

enum Pages
{
     Search,
     Report
};

有没有办法做这样的事情:

Dictionary<string, enum> filters = new Dicionary<string, enum>()
{
   {Pages.Search.ToString(), SearchFilters},
   {Pages.Report.ToString(), ReportFilters}
};

并使用它:

filters[Pages.Search.ToString()].  <--- and here will appear the list of enum values.

例如,您可以使用SearchFilters枚举值:

filters[Pages.Search.ToString()].ItemPerPage

有什么想法吗?

感谢。

3 个答案:

答案 0 :(得分:0)

你可以这样做。但我不认为在同一个字典中使用不同枚举的想法是好的。

Dictionary<Pages, Type> filters = new Dictionary<Pages, Type>()
{
    {Pages.Search, typeof(SearchFilters)},
    {Pages.Report, typeof(ReportFilters)}
};

var arr = Enum.GetValues (filters [Pages.Report]);

答案 1 :(得分:0)

你必须要么使用 Dictionary<string, Array>

var filters = new Dictionary<string, Array>()
    {
        { "Search", Enum.GetValues(typeof(SearchFilters)) }
    };

filters["Search"].Length; // 2. 
filters["Search"].Cast<SearchFilters>().Count(); // 2

或仅将Type存储在Dictionary<string, Type>

    var filters = new Dictionary<string, Type>()
    {
        { "Search", typeof(SearchFilters) }
    };

Enum.GetValues(filters["Search"]).Length; // 2

答案 2 :(得分:0)

您不能在一个字典中保留两种不同的类型(除了您打开 - 取消打包类型)。我建议将Key保留为enum Page,将值保持为List<string>

然后您可以为枚举创建以下扩展名:

public static List<string> ToMemberList(this Enum enumerationValue)
        {
            var type = enumerationValue.GetType();
            return Enum.GetValues(type).Cast<object>().Select(x => x.ToString()).ToList();
        }

以这种方式使用它来创建你的字典:

var dit = new Dictionary<Pages, List<string>>()
                              {
                                  { Pages.Search, SearchFilters.Id.ToMemberList() },
                                  { Pages.Report, ReportFilters.Age.ToMemberList() }
                              };

var x1 = dit[Pages.Search];

此处x1包含SearchFilters中的值列表。

注意:请记住将扩展方法保留在静态类中。