【发布时间】:2017-11-27 02:42:40
【问题描述】:
我正在尝试创建一种优雅且可扩展的方式来查询将枚举映射到一组字符串的字典。
所以我有这个类SearchFragments,里面有字典。然后,我想要一个方法,让此类的消费者可以简单地询问“HasAny”,而这正是我苦苦挣扎的地方,只需传入一些查询,如表达式,然后得到布尔答案。
public class SearchFragments
{
private readonly IDictionary<SearchFragmentEnum, IEnumerable<string>> _fragments;
public SearchFragments()
{
_fragments = new Dictionary<SearchFragmentEnum, IEnumerable<string>>();
}
public bool HasAny(IEnumerable<SearchFragmentEnum> of)
{
int has = 0;
_fragments.ForEach(x => of.ForEach(y => has += x.Key == y ? 1 : 0));
return has >= 1;
}
}
目前这种方式的问题是,这个类的消费者现在必须构造一个IEnumerable<SearchFragmentEnum>,这可能非常混乱。
我正在寻找的是消费代码将能够编写以下内容:
searchFragments.HasAny(SearchFragmentEnum.Name, SearchFragmentEnum.PhoneNumber)
但是该参数列表的大小可能会有所不同(我不必为每个可能的组合在 SearchFragments 类中编写方法重载(这样,如果在将来的某个日期将新值添加到 SearchFragmentEnum 中,我就不会了)不必更新课程。
【问题讨论】:
-
试试这个:
return of?.Any(_fragments.ContainsKey) ?? false;
标签: c# syntax open-closed-principle