IEnumerable没有Count方法


81

我有以下方法:

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

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

为什么当我在.Count()上面进行操作时,它用红色下划线标出?

我收到以下错误:

错误1'System.Collections.Generic.IEnumerable'不包含'Count'的定义,并且找不到扩展方法'Count'接受类型为'System.Collections.Generic.IEnumerable'的第一个参数(您是否缺少使用指令还是程序集引用?)c:\ users \ a \ documents \ visual studio 2010 \ Projects \ NerdDinner \ NerdDinner \ Models \ Dinner.cs 15 47 NerdDinner


有同样的问题。由于某些原因,您不能右键单击它,然后选择“解决...”来修复它:(
micahhoover 2013年

叹!我有System.Linq,但仍然收到此错误。(尽管他的错误消息将第一个参数命名为“ System.Linq.IQueryable”。)
Hot Licks

Answers:


158

您添加:

using System.Linq;

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

Count()System.Linq.Enumerable静态类提供的扩展方法,用于LINQ to Objects,System.Linq.QueryableLINQ to SQL和其他进程外提供程序。

编辑:实际上,使用Count()此处效率相对较低(至少在LINQ to Objects中)。您只想知道是否有任何元素,对吗?在这种情况下,Any()更合适:

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

如果此参考给您带来错误,请验证项目的“目标框架”(在项目属性的“应用程序”选项卡中)是否设置为.NET Framework 3.5或4。扩展方法不适用于2.0或更早版本。
willvv

1
我已经使用过System.Linq; 但这不能解决我的问题...如何确定对System.Core程序集的引用?
aherlambang

哦,没关系,我已修复它... System.data.linq和System.Linq有什么区别
aherlambang 2010年

@Alexander:它们是完全不同的名称空间。System.Data.Linq特定于LINQ to SQL。
乔恩·斯基特

1
@skyfoot:不,真的不会。它会给您4。如果您有其他看法,请发布一个简短但完整的程序来演示问题。
乔恩·斯基特

7

Any()Count()Linq中的方法仅适用于泛型类型。

IEnumerable<T>

如果您有一个简单的IEnumerable无类型,请尝试使用

IEnumerable<object> 

代替。


2

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


-1

怎么样:

public bool IsValid
{
    get { return (GetRuleViolations().Cast<RuleViolation>().Count() == 0); }
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.