私はList
の値を持つ辞書を持っています。特定のキーに属する特定の要素をリストから選択したいと考えています。私はこれまでのところ、これを試してみました:LINQを使用してキーが存在する場合、辞書から値を選択
Dictionary<int, List<bool>> dic = new Dictionary<int, List<bool>>();
dic.Add(1, new List<bool> { true, true, false });
var works = dic.Where(x => x.Key == 1).SingleOrDefault().Value.Where(x => x == true).ToList();
var doesNotWork = dic.Where(x => x.Key == 2).SingleOrDefault().Value.Where(x => x == true).ToList();
1に等しいキーは、私は2つの要素でList<bool>
を取得したがってがあるので最初のLINQ作品。 値がnull
であるため、2番目のLINQが機能しません。辞書に適切なキーがない場合、空のList<bool>
が得られるように、どのようにそのLINQを書き直すことができますか?
私は、デフォルトの要素にValueの代わりに空のリストがあると思っていたので、私のアプローチがうまくいくと思いました。
最も簡単な解決策は、あなたが値を二度チェックしないように、すなわち、Dictionary<T>.TryGetValue
を使用することです
あなたの鍵を保持するいくつかの変数である' Dictionary.TryGetValue(使用して辞書から値を取得しようとしない理由
var shouldWork = dic[key]?.Where(x => x == true).ToList() ?? new List<bool>();
:ヌルのためのチェックは、あなたがこれに上記のLINQクエリを簡素化することができ? – ASh
'Take(1)'は1つの項目または空の列挙を返します。これは、あなたの望むことですか? (x => x.Key == 2).Take(1).Select(kvp => kvp.Value).SelectMany(x => x).ToList(); 'しかし、LINQ解析するのが難しいですが、代わりに通常のC#で行います。 –
DictionaryのContainKey()メソッドを使用します。 – jdweng