У меня есть следующий метод:
public bool IsValid
{
get { return (GetRuleViolations().Count() == 0); }
}
public IEnumerable<RuleViolation> GetRuleViolations(){
//code here
}
Почему это - это, когда я делаю .Count()
выше его подчеркивается в красном?
Я получил следующую ошибку:
Ошибка 1 'Система. Наборы. Универсальный. IEnumerable' не содержит определение для 'количества' и никакой дополнительный метод 'количество', принимающее первый аргумент типа 'Система. Наборы. Универсальный. IEnumerable' мог быть найден (Вы пропускаете директиву использования или ссылку на сборку?) c:\users\a\documents\visual studio 2010\Projects\NerdDinner\NerdDinner\Models\Dinner.cs 15 47 NerdDinner
Вы добавляете:
using System.Linq;
вверху исходного кода и убедитесь, что у вас есть ссылка на сборку System.Core.
Count ()
- это метод расширения, предоставляемый статическим классом System.Linq.Enumerable
для LINQ to Objects и System.Linq.Queryable
для LINQ to SQL. и другие сторонние поставщики.
РЕДАКТИРОВАТЬ: Фактически, использование Count ()
здесь относительно неэффективно (по крайней мере, в LINQ to Objects). Все, что вам нужно знать, это есть ли какие-нибудь элементы или нет, верно? В этом случае лучше подходит Any ()
:
public bool IsValid
{
get { return !GetRuleViolations().Any(); }
}
IEnumeration
не имеет метода с именем Count ()
. Это просто некая «последовательность элементов». Используйте, например, List
, если вам явно нужно количество элементов.
Если вы используете Linq, имейте в виду, что метод расширения Count ()
может фактически пересчитать количество элементов каждый раз, когда вы его вызываете.