J'ai la méthode suivante:
public bool IsValid
{
get { return (GetRuleViolations().Count() == 0); }
}
public IEnumerable<RuleViolation> GetRuleViolations(){
//code here
}
Pourquoi est-ce que lorsque je fais .Count()
ci-dessus, il est souligné en rouge?
J'ai eu l'erreur suivante:
L'erreur 1 "System.Collections.Generic.IEnumerable" ne contient pas de définition pour "Count" et aucune méthode d'extension "Count" acceptant un premier argument de type "System.Collections.Generic.IEnumerable" a pu être trouvée (vous manque-t-il un en utilisant une directive ou une référence d'assembly?) c:\users\a\documents\visual studio 2010\Projects\NerdDinner\NerdDinner\Models\Dinner.cs 15 47 NerdDinner
Vous ajoutez:
using System.Linq;
en haut de votre source et assurez-vous d'avoir une référence à l'assembly System.Core.
Count()
est une méthode d'extension fournie par la classe statique System.Linq.Enumerable
pour LINQ to Objects, et System.Linq.Queryable
pour LINQ to SQL et d'autres fournisseurs hors processus.
EDIT: En fait, utiliser Count()
ici est relativement inefficace (au moins dans LINQ to Objects). Tout ce que vous voulez savoir, c'est s'il y a des éléments ou pas, non? Dans ce cas, Any()
convient mieux:
public bool IsValid
{
get { return !GetRuleViolations().Any(); }
}
Les méthodes Any()
ou Count()
dans Linq ne fonctionnent que pour les types génériques.
IEnumerable<T>
Si vous avez un simple IEnumerable
sans type, essayez d'utiliser
IEnumerable<object>
au lieu.
IEnumeration
n'a pas de méthode appelée Count()
. C'est juste une sorte de "séquence d'éléments". Utilisez par exemple List
si vous avez explicitement besoin du nombre d'éléments. Si vous utilisez Linq, gardez à l'esprit que la méthode d'extension Count()
peut réellement recompter le nombre d'éléments à chaque appel.
Que diriez-vous:
public bool IsValid
{
get { return (GetRuleViolations().Cast<RuleViolation>().Count() == 0); }
}