86

私は次の方法を持っています:

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

4

5 に答える 5

168

あなたが追加します:

using System.Linq;

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

Count()LINQ to Objects、 LINQ to SQL およびその他のアウトプロセス プロバイダーのSystem.Linq.Enumerable静的クラスによって提供される拡張メソッドです。System.Linq.Queryable

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

public bool IsValid
{
  get { return !GetRuleViolations().Any(); }
}
于 2010-04-17T17:23:21.493 に答える
2

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

于 2010-04-17T17:29:40.183 に答える
-1

どうですか:

public bool IsValid
{
    get { return (GetRuleViolations().Cast<RuleViolation>().Count() == 0); }
}
于 2012-05-15T20:07:19.723 に答える