私はよく次のようなコードを書きます: if ( list.Count > 0 ) { }
これは効率的ですか?
はい。これは、リスト内のフィールドに格納されているリスト内のカウントを取得し、それをゼロと比較します。
ここで、あなたが尋ねなかった質問:
どう if ( sequence.Count() > 0 ) { }
ですか?( の括弧に注意してくださいCount()
。)
実行時にシーケンスを調べて、Count
効率的に計算できるプロパティを持つリストであるかどうかを確認します。そうであれば、それを呼び出します。そうでない場合は、シーケンス全体を一度に 1 項目ずつカウントし、それをゼロと比較します。
それは非常に非効率的ではありませんか?
はい。
より効率的なものは何ですか?
if (sequence.Any())
なぜそれがより効率的なのですか?
1 つの要素を繰り返し処理しようとするためです。成功した場合Any
は真です。失敗した場合Any
は false です。瓶の中のジェリービーンズの数を数える必要はありません。少なくとも 1 つあるかどうかを確認するだけで済みます。
大幅に効率化されただけでなく、コードが意図したとおりに読み取れるようになりました。「リストにアイテムはありますか?」と尋ねたい場合 次に、「リストに項目はありますか?」と尋ねます。「リスト内のアイテムの数はゼロより大きいですか?」ではありません。
Capacity
リストのプロパティはどうですか?
これは、リストの内部データ構造に事前に割り当てられたスペースの量を示しています。これは、追加のメモリを割り当てる前にリストが格納できるアイテムの量です。