IEnumerable doesn't have a Count method

送分小仙女□ 提交于 2019-11-26 07:38:22

问题


I have the following method:

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

public IEnumerable<RuleViolation> GetRuleViolations(){
  //code here
}

Why is it that when I do .Count() above it is underlined in red?

I got the following error:

Error 1 \'System.Collections.Generic.IEnumerable\' does not contain a definition for \'Count\' and no extension method \'Count\' accepting a first argument of type \'System.Collections.Generic.IEnumerable\' could be found (are you missing a using directive or an assembly reference?) c:\\users\\a\\documents\\visual studio 2010\\Projects\\NerdDinner\\NerdDinner\\Models\\Dinner.cs 15 47 NerdDinner


回答1:


You add:

using System.Linq;

at the top of your source and make sure you've got a reference to the System.Core assembly.

Count() is an extension method provided by the System.Linq.Enumerable static class for LINQ to Objects, and System.Linq.Queryable for LINQ to SQL and other out-of-process providers.

EDIT: In fact, using Count() here is relatively inefficient (at least in LINQ to Objects). All you want to know is whether there are any elements or not, right? In that case, Any() is a better fit:

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



回答2:


Any() or Count() methods in Linq work only for generic types.

IEnumerable<T>

If you have a simple IEnumerable without a type, try to use

IEnumerable<object> 

instead.




回答3:


IEnumeration does not have a method called Count(). It's just a kind of "sequence of elements". Use for example List if you explicitly need the number of elements. If you use Linq keep in mind, that the extension method Count() may actually re-count the number of elements each time you call it.




回答4:


How about:

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


来源:https://stackoverflow.com/questions/2659290/ienumerable-doesnt-have-a-count-method

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!