1

現時点では、次の手順を使用して、リストに要素があるかどうかを判断しています。

if (aList.Count > 0)
{
   //doStuff
}

比較を使用せずに、要素があるかどうかを調べるためのよりエレガントな方法があるかどうかを自問しています。

4

6 に答える 6

8

あなたはlinqを使うことができます:

if (aList.Any())
{
   //doStuff
}
于 2012-04-11T14:15:18.333 に答える
8

Countが最適なオプションです。これは、List<>アクセス時間が であることを意味するプロパティですO(1)

説明的でもあります。

于 2012-04-11T14:16:19.317 に答える
2

気になる言葉遣いがあり、それをより表現力豊かに説明したい場合は、カスタム拡張メソッドを作成できます。

public static bool HasItems(this IList<T> list)
{
    return list.Count > 0;
}

次に、次のように使用します。

if (aList.HasItems())
{
   //doStuff
}

それは本当に個人的な好みの問題です。たとえば、この用語HasItemsはより直感的に聞こえるCount > 0かもしれません。

ただし、私が個人的に気に入らないのは、それがプロパティではなくメソッドであることです。(個人的には、C# が「拡張プロパティ」のサポートを追加してくれると嬉しいです。) 例外はありますが、私は直感的に、プロパティが何かの状態に関する情報を提供してくれることを期待しています ( Oded が言及しているようO(1)に間に合うことを願っています)。メソッドが「何かをする」ことを期待し、オブジェクトの状態に何らかの副作用をもたらします。

繰り返しますが、それはすべて個人的な好みの問題です。あなたが利用できるオプションです。

于 2012-04-11T14:25:22.383 に答える
1

以下のように拡張メソッドを書くことができます

    public static Boolean IsEmpty<T>(this IEnumerable<T> sourceList)
    {
       return (sourceList==null) ? true : !sourceList.Any();
    } 

詳細については、この質問を参照してください-LINQでリストが空かどうかを確認する

于 2012-04-11T14:22:59.357 に答える
0

これはすでに最もエレガントなソリューションです。

(ほんの一例) Count(x=>x..condition..);linq 型を使用して、指定された条件を満たす要素の数を調べることができます。

于 2012-04-11T14:15:30.537 に答える
0

このチェックを拡張機能でラップしました(ヌルチェックとアイテムのチェックは面倒です)

  public static bool IsAny<T>(this IEnumerable<T> item)
  {
            return item != null && item.Any();
  }

// Usage
listOfFoo.IsAny() 
于 2012-04-11T14:30:40.983 に答える