リストが空かどうかを判断するための「速度」と読みやすさの両方を考慮した「最良の」方法は何ですか?リストがタイプIEnumerable<T>
で、Countプロパティがない場合でも。
今、私はこれの間で投げ合っています:
if (myList.Count() == 0) { ... }
この:
if (!myList.Any()) { ... }
2番目のオプション(IEnumerableの場合)がすべてのアイテムにアクセスしてカウントを返す必要があるのに対し、2番目のオプションは最初のアイテムが見つかるとすぐに結果が返されるため、より高速であると思います。
そうは言っても、2番目のオプションはあなたにとって読みやすいように見えますか?どっちがいい?または、空のリストをテストするためのより良い方法を考えられますか?
Edit @lassevkの応答は、最も論理的であるようであり、可能な場合はキャッシュされたカウントを使用するための実行時チェックのビットと相まって、次のようになります。
public static bool IsEmpty<T>(this IEnumerable<T> list)
{
if (list is ICollection<T>) return ((ICollection<T>)list).Count == 0;
return !list.Any();
}
list.Any()
同等ではないlist.IsEmpty
ですか?フレームワークメソッドは最適化する必要があります。パフォーマンスのボトルネックであることがわかった場合にのみ、新しいフレームワークメソッドを作成する価値があります。
IsEmpty
拡張メソッドを追加する.NET Coreクラスライブラリに問題を提案しました。 github.com/dotnet/corefx/issues/35054 確認して投票してください。
is
とcast
が、使用as
してnull
確認しますICollection<T> collection = list as ICollection<T>; if (collection != null) return colllection.Count;