web-dev-qa-db-fra.com

IEnumerable n'a pas de méthode Count

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

75
aherlambang

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(); }
}
149
Jon Skeet

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.

3
Renzo Ciot

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.

2
Danvil

Que diriez-vous:

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