IEnumerable n’a pas de méthode Count

J’ai la méthode suivante:

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

Pourquoi est-ce que quand 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” n’a été trouvée (manque-t-il un using directive ou une référence d’assembly?) c: \ users \ a \ documents \ visual studio 2010 \ Projets \ 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 non, n’est-ce pas? Dans ce cas, Any() convient mieux:

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

    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 fois que vous l’appelez.

    Any() méthodes Any() ou Count() dans Linq ne fonctionnent que pour les types génériques.

     IEnumerable 

    Si vous avez un simple IEnumerable sans type, essayez d’utiliser

     IEnumerable 

    au lieu.

    Que diriez-vous:

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