【问题标题】:How to use enum as value of the dictionary?如何使用枚举作为字典的值?
【发布时间】:2015-08-07 22:31:18
【问题描述】:

接下来有什么办法吗,看例子:

我有带过滤器的枚举:

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

有什么想法吗?

谢谢。

【问题讨论】:

  • 最好使用 linq 上下文来处理这种情况。
  • 你的问题对我来说仍然模棱两可。

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


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    您必须使用 Dictionary&lt;string, Array&gt;

    var filters = new Dictionary<string, Array>()
        {
            { "Search", Enum.GetValues(typeof(SearchFilters)) }
        };
    
    filters["Search"].Length; // 2. 
    filters["Search"].Cast<SearchFilters>().Count(); // 2
    

    或者只是将Type 存储在Dictionary&lt;string, Type&gt; 中:

        var filters = new Dictionary<string, Type>()
        {
            { "Search", typeof(SearchFilters) }
        };
    
    Enum.GetValues(filters["Search"]).Length; // 2
    

    【讨论】:

    • 但最好的方法是为此创建自己的类
    【解决方案3】:

    您不能在一本字典中保留两种不同的类型(除非您将类型拆箱)。我建议将Key 保留为enum Page,并将值保留为List&lt;string&gt;

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

    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 中的值列表作为字符串。

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

    【讨论】:

      猜你喜欢
      • 2019-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多