私は次の方法があります:
_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
あなたが追加します:
_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(); }
}
_
LinqのAny()
またはCount()
メソッドは、ジェネリック型に対してのみ機能します。
IEnumerable<T>
型のない単純なIEnumerable
がある場合は、使用してみてください
IEnumerable<object>
代わりに。
IEnumeration
にはCount()
というメソッドがありません。それは一種の「要素のシーケンス」です。要素の数が明示的に必要な場合は、たとえばList
を使用します。 Linqを使用する場合、拡張メソッドCount()
は実際に呼び出すたびに要素の数を再カウントする可能性があることに注意してください。
どうですか:
public bool IsValid
{
get { return (GetRuleViolations().Cast<RuleViolation>().Count() == 0); }
}