web-dev-qa-db-ja.com

IEnumerableにはCountメソッドがありません

私は次の方法があります:

_public bool IsValid
{
  get { return (GetRuleViolations().Count() == 0); }
}

public IEnumerable<RuleViolation> GetRuleViolations(){
  //code here
}
_

上の.Count()を行うと赤で下線が引かれるのはなぜですか?

次のエラーが表示されました。

エラー1「System.Collections.Generic.IEnumerable」には「Count」の定義が含まれておらず、タイプ「System.Collections.Generic.IEnumerable」の最初の引数を受け入れる拡張メソッド「Count」が見つかりませんでしたディレクティブまたはアセンブリ参照を使用していますか?)c:\ users\a\documents\visual studio 2010\Projects\NerdDinner\NerdDinner\Models\Dinner.cs 15 47 NerdDinner

75
aherlambang

あなたが追加します:

_using System.Linq;
_

ソースの最上部で、System.Coreアセンブリへの参照があることを確認してください。

Count() は、 _System.Linq.Enumerable_ LINQ to Objectsの静的クラスによって提供される拡張メソッドであり、 _System.Linq.Queryable_ LINQ to SQLおよびその他のアウトプロセスプロバイダーの場合。

編集:実際には、ここでCount()を使用することは比較的非効率的です(少なくともLINQ to Objectsでは)。知りたいのは、any要素があるかどうかだけですよね?その場合、Any()がより適しています。

_public bool IsValid
{
  get { return !GetRuleViolations().Any(); }
}
_
149
Jon Skeet

LinqのAny()またはCount()メソッドは、ジェネリック型に対してのみ機能します。

IEnumerable<T>

型のない単純なIEnumerableがある場合は、使用してみてください

IEnumerable<object> 

代わりに。

3
Renzo Ciot

IEnumerationにはCount()というメソッドがありません。それは一種の「要素のシーケンス」です。要素の数が明示的に必要な場合は、たとえばListを使用します。 Linqを使用する場合、拡張メソッドCount()は実際に呼び出すたびに要素の数を再カウントする可能性があることに注意してください。

2
Danvil

どうですか:

public bool IsValid
{
    get { return (GetRuleViolations().Cast<RuleViolation>().Count() == 0); }
}
0
Kulvir