IEnumerable没有Count方法

我有以下的方法:

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

为什么当我做.Count()上面是红色的下划线?

我得到了以下错误:

错误1'System.Collections.Generic.IEnumerable'不包含'Count'的定义,并且没有扩展方法'Count'接受types'System.Collections.Generic.IEnumerable'的第一个参数可以被发现(你是否错过了使用指令或程序集引用?)c:\ users \ a \ documents \ visual studio 2010 \ Projects \ NerdDinner \ NerdDinner \ Models \ Dinner.cs 15 47 NerdDinner

您添加:

 using System.Linq; 

在您的源代码顶部,并确保您有一个System.Core程序集的引用。

Count()是LINQ to Objects的System.Linq.Enumerable静态类提供的扩展方法,LINQ to SQL和其他进程外提供者的System.Linq.Queryable

编辑:事实上,这里使用Count()是相对低效的(至less在LINQ到对象)。 所有你想知道的是,是否有任何元素,对吗? 在这种情况下, Any()更合适:

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

IEnumeration没有一个称为Count()的方法。 这只是一种“元素序列”。 如果明确需要元素的数量,则使用List 。 如果你使用Linq记住,扩展方法Count()实际上可以在每次调用它时重新计算元素的数量。

Linq中的Any()Count()方法仅适用于非genericstypes。

 IEnumerable<T> 

如果您有一个简单的IEnumerable没有types,请尝试使用

 IEnumerable<object> 

代替。

怎么样:

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