素朴なヒントとして、IEnumerable.Any()を使用することがよくあります。なぜなら、列挙型全体を必ずしもトラバースする必要がないからです。コンパイラはIEnumerable <T> .Count()との比較を最適化しますか?
Enumerableに単一の項目または複数の項目が含まれているかどうかを調べるための小さなコードセグメントを書きました。私は不思議作ら
if (reportInfo.OrebodyAndPits.SelectMany(ob => ob.Pits).Count() > 1)
{
ws.Cells[row, col++].Value = "Pits";
}
else
{
ws.Cells[row, col++].Value = "Pit";
}
、比較をするとすぐそれが最初の項目を過ぎて列挙としてfalseを返すために十分にスマートである形式にコンパイルされるのですか?
もしそうでなければ、そうするlinq拡張メソッドを書く方法がありますか?
(。私は主に好奇心が強い私は、コードのこの作品のパフォーマンスへの影響でひどく興味がない、注意してください。)
いいえ、 '.Count()'はアイテムの数を返します。 '123456789'を実行し、'> 1'の条件をチェックします。スマートな動作のために 'Skip(1).Any()'を入れてください。場合によっては、.Netは 'IEnumerable'が実際に*配列* 'T []'または* list * 'List 'であると判断し、トラバースではなく 'Length'または' Count'を呼び出しますしかし、それは私たちが期待できることです。 –