IList<>
が空でないかどうかを安全に確認しようとしています。ブール条件の合併をヌルにする方法は?
var Foo = Bar.GimmeIListT(); // Returns an IList<SomeObject>
if (Foo?.Any())
// Do cool stuff with items in Foo
しかし、条件付きエラーがある:
は、暗黙のうちに 'ブール?' に変換できませんブールに
:明示的な変換は、だから、条件がNULL可能ブール値に評価され、私はif (Foo?.Any().Value())
を試すようだが、これはどちらか良くない(?あなたはキャストが欠落している)
が存在します
「ブール」....「価値」と拡張子なしの定義が含まれていません何とか何とか何とか
だから、Fで最初のインスタンスでは、それがnullのboolであると文句を言いますが、2番目のインスタンスでは、それはそうではないと文句を言います。
if (Foo?.Any() == true)
これは動作します - それは、これは最初のメッセージは、それが望んでいないと言った暗黙の型変換を使用するべきではありませんので:別の道として
は、私が試してみてください!何が起こっていますか?これを行う正しい方法は何ですか?
場合(?Fooの.Count> 0){} –
@ AndzejMaciusovic:それは悪い方法です。 'Foo'が実際に完全に実行するのに何時間もかかるクエリであれば、' Any'が間違って見逃されるでしょう。少なくとも1つがあるかどうかを知りたい場合は、すべてを数えないでください。 –
@TimSchmelter私の例では、Countを使用していません.Count().Countは既にIListの計算フィールドです。実際は.Any()の代わりに.Countを使用する方が少し速いです。リスト上。 –