IEnumerable non ha un metodo Count

Ho il seguente metodo:

public bool IsValid { get { return (GetRuleViolations().Count() == 0); } } public IEnumerable GetRuleViolations(){ //code here } 

Perché quando faccio .Count() sopra è sottolineato in rosso?

Ho ricevuto il seguente errore:

Errore 1 ‘System.Collections.Generic.IEnumerable’ non contiene una definizione per ‘Count’ e nessun metodo di estensione ‘Count’ accetta un primo argomento di tipo ‘System.Collections.Generic.IEnumerable’ potrebbe essere trovato (ti manca un usando direttiva o riferimento all’assembly?) c: \ users \ a \ documents \ visual studio 2010 \ Projects \ NerdDinner \ NerdDinner \ Models \ Dinner.cs 15 47 NerdDinner

Aggiungi:

 using System.Linq; 

nella parte superiore della tua fonte e assicurati di avere un riferimento all’assembly System.Core.

Count() è un metodo di estensione fornito dalla class statica System.Linq.Enumerable per LINQ to Objects e System.Linq.Queryable per LINQ to SQL e altri provider out-of-process.

EDIT: In effetti, l’uso di Count() qui è relativamente inefficiente (almeno in LINQ to Objects). Tutto quello che vuoi sapere è se ci sono elementi o no, giusto? In tal caso, Any() è una soluzione migliore:

 public bool IsValid { get { return !GetRuleViolations().Any(); } } 

IEnumeration non ha un metodo chiamato Count() . È solo una specie di “sequenza di elementi”. Utilizza ad esempio List se hai bisogno esplicitamente del numero di elementi. Se si utilizza Linq, tenere presente che il metodo di estensione Count() può effettivamente contare nuovamente il numero di elementi ogni volta che viene chiamato.

Any() metodi Any() o Count() in Linq funzionano solo per i tipi generici.

 IEnumerable 

Se hai un IEnumerable semplice senza un tipo, prova ad usare

 IEnumerable 

anziché.

Che ne dite di:

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