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); } }