私は、列挙型を文字列のセットにマップする、辞書を照会するエレガントで拡張可能な方法を作成しようとしています。C#の辞書を照会するエレガントな方法
私はこのクラスに辞書を持っている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)
しかし、その引数リストは、私は方法のオーバーロードを記述することなく、(大きさを変えることができます新しい値が将来の日付でSearchFragmentEnum
に追加された場合、私はクラスを更新する必要がないように、すべての可能な組み合わせのためのSearchFragments
クラス(。
が重複する可能性を持つ
または短い:内側のループを持つことuneccessaryあるので、また、あなたは、O(1)キーチェックを持っている辞書を使用していますparamsキーワード?](https://stackoverflow.com/questions/7580277/why-use-the-params-keyword) – krillgar
これを試してください: 'return??Any(_fragments.ContainsKey)??偽; ' – Sergey