現時点では、次の手順を使用して、リストに要素があるかどうかを判断しています。
if (aList.Count > 0)
{
//doStuff
}
比較を使用せずに、要素があるかどうかを調べるためのよりエレガントな方法があるかどうかを自問しています。
あなたはlinqを使うことができます:
if (aList.Any())
{
//doStuff
}
Count
が最適なオプションです。これは、List<>
アクセス時間が であることを意味するプロパティですO(1)
。
説明的でもあります。
気になる言葉遣いがあり、それをより表現力豊かに説明したい場合は、カスタム拡張メソッドを作成できます。
public static bool HasItems(this IList<T> list)
{
return list.Count > 0;
}
次に、次のように使用します。
if (aList.HasItems())
{
//doStuff
}
それは本当に個人的な好みの問題です。たとえば、この用語HasItems
はより直感的に聞こえるCount > 0
かもしれません。
ただし、私が個人的に気に入らないのは、それがプロパティではなくメソッドであることです。(個人的には、C# が「拡張プロパティ」のサポートを追加してくれると嬉しいです。) 例外はありますが、私は直感的に、プロパティが何かの状態に関する情報を提供してくれることを期待しています ( Oded が言及しているようO(1)
に間に合うことを願っています)。メソッドが「何かをする」ことを期待し、オブジェクトの状態に何らかの副作用をもたらします。
繰り返しますが、それはすべて個人的な好みの問題です。あなたが利用できるオプションです。
以下のように拡張メソッドを書くことができます
public static Boolean IsEmpty<T>(this IEnumerable<T> sourceList)
{
return (sourceList==null) ? true : !sourceList.Any();
}
詳細については、この質問を参照してください-LINQでリストが空かどうかを確認する
これはすでに最もエレガントなソリューションです。
(ほんの一例) Count(x=>x..condition..);
linq 型を使用して、指定された条件を満たす要素の数を調べることができます。
このチェックを拡張機能でラップしました(ヌルチェックとアイテムのチェックは面倒です)
public static bool IsAny<T>(this IEnumerable<T> item)
{
return item != null && item.Any();
}
// Usage
listOfFoo.IsAny()