2010-04-17 5 views
68

У меня есть следующий метод:IEnumerable не имеет метода Count

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

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

Почему, когда я .Count() над ней подчеркивается красным цветом?

я получил следующее сообщение об ошибке:

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

+0

Был такой же проблема. По какой-то причине вы не можете щелкнуть правой кнопкой мыши и выбрать «Resolve ...», чтобы исправить это :( – micahhoover

+0

Вздох! Я включил System.Linq, но все равно получаю эту ошибку. (Хотя в сообщении об ошибке он назвал первый arg как " System.Linq.IQueryable ".) –

ответ

141

Вы добавляете:

using System.Linq; 

в верхней части источника и убедитесь, что у вас есть ссылка на сборку System.Core.

Count() - это метод расширения, предоставляемый статическим классом System.Linq.Enumerable для LINQ to Objects и System.Linq.Queryable для LINQ to SQL и других поставщиков вне процесса.

EDIT: Фактически, использование Count() здесь относительно неэффективно (по крайней мере, в LINQ to Objects). Все, что вы хотите знать, есть ли любые элементы или нет, не так ли? В этом случае Any() лучше подходит:

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

Если эта ссылка дает вам ошибку, убедитесь, что в целевой структуре вашего проекта (в свойствах проекта, вкладке« Приложение ») установлена ​​.NET Framework 3.5 или 4. Методы расширения не будут работать на 2.0 или более ранних версиях. – willvv

+1

У меня было использование System.Linq, но оно не устраняет мою проблему ... как я могу убедиться, что у меня есть ссылка на сборку System.Core? – aherlambang

+0

Целевая структура .NET. Framework 4 – aherlambang

2

IEnumeration не имеет метод, называемый Count(). Это всего лишь своего рода «последовательность элементов». Используйте, например, List, если вам явно нужно количество элементов. Если вы используете Linq, имейте в виду, что метод расширения Count() может фактически перечитать количество элементов каждый раз, когда вы его вызываете.

0

Как насчет:

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

Any() или Count() методы Linq работают только для общих типов.

IEnumerable<T> 

Если у вас есть простой IEnumerable без типа, попробуйте использовать

IEnumerable<object> 

вместо этого.

Смежные вопросы