是否有办法做下一步,参见示例:
我有一个带有过滤器的enum:
enum SearchFilters
{
Id,
ItemsPerPage
};
enum ReportFilters
{
Name,
Age
};
和带有页面的enum:
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 enum的值:
filters[Pages.Search.ToString()].ItemPerPage
任何想法?
谢谢。
您可以这样做。但是我不认为在同一个字典里有不同的枚举是好的。
Dictionary<Pages, Type> filters = new Dictionary<Pages, Type>()
{
{Pages.Search, typeof(SearchFilters)},
{Pages.Report, typeof(ReportFilters)}
};
var arr = Enum.GetValues (filters [Pages.Report]);
您必须使用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
您不能在一个字典中保留两种不同的类型(除非您将该类型box-unbox)。我建议保持Key
为enum Page
,值为List<string>
。
那么你可以为enum创建如下扩展:
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中的值列表。