84 votes

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-il que lorsque je n' .Count() ci-dessus, il est souligné en rouge?

J'ai eu l'erreur suivante:

Erreur 1 'Système.Les Collections.Génériques.IEnumerable' ne contient pas une définition pour 'Nombre' et aucune méthode d'extension 'Count' acceptant un premier argument de type 'Système.Les Collections.Génériques.IEnumerable' (vous manque un à l'aide d'une directive ou d'une assemblée de référence?) c:\users\a\documents\visual studio 2010\Projects\NerdDinner\NerdDinner\Modèles\Dîner.cs 15 47 NerdDinner

161voto

Jon Skeet Points 692016

Vous ajoutez:

using System.Linq;

en haut de votre source et assurez-vous que vous avez une référence pour le Système.Assemblage de base.

Count() est une méthode d'extension fournis par l' System.Linq.Enumerable classe statique pour LINQ to Objects, et System.Linq.Queryable pour LINQ to SQL et d'autres out-of-process des fournisseurs.

EDIT: En fait, l'utilisation d' Count() ici est relativement inefficace (au moins dans LINQ to Objects). Tout ce que vous voulez savoir, c'est si il y a tout les éléments ou pas, non? Dans ce cas, Any() est un meilleur ajustement:

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

2voto

Danvil Points 9443

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 à nouveau compter le nombre d’éléments à chaque appel.

-1voto

Kulvir Points 41

Que diriez-vous:

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X