IEnumerable не имеет метода Count
У меня есть следующий метод:
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 студия 2010\Projects\NerdDinner\NerdDinner\Models\Dinner.cs 15 47 NerdDinner
Ответы
Ответ 1
Вы добавляете:
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(); }
}
Ответ 2
IEnumeration
не имеет метода, называемого Count()
. Это просто своего рода "последовательность элементов". Используйте, например, List
, если вам явно нужно количество элементов.
Если вы используете Linq, имейте в виду, что метод расширения Count()
может фактически пересчитать количество элементов каждый раз, когда вы его вызываете.
Ответ 3
Any()
или Count()
методы в Linq работают только для общих типов.
IEnumerable<T>
Если у вас есть простой IEnumerable
без типа, попробуйте использовать
IEnumerable<object>
вместо.
Ответ 4
Как насчет:
public bool IsValid
{
get { return (GetRuleViolations().Cast<RuleViolation>().Count() == 0); }
}