IEnumerable не имеет метода подсчета
у меня есть следующий метод:
public bool IsValid
{
get { return (GetRuleViolations().Count() == 0); }
}
public IEnumerable<RuleViolation> GetRuleViolations(){
//code here
}
почему это, когда я делаю .Count()
выше он подчеркнут красным цветом?
Я получил следующую ошибку:
Ошибка 1 'Системы.Коллекции.Родовой.IEnumerable' не содержит определения для 'Считать', а не метод расширения "Граф" принимает первый аргумент тип - Система.Коллекции.Родовой.IEnumerable' может быть найден (отсутствует использование директивы или сборки ссылка?) c:usersadocumentsvisual студия 2010ПроектыNerdDinnerNerdDinnerМоделиУжин.cs 15 47 NerdDinner
4 ответа:
добавить:
using System.Linq;
в верхней части источника и убедитесь, что у вас есть ссылка на систему.Сборка сердечника.
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(); } }
IEnumeration
не имеет метода с именемCount()
. Это просто своего рода "последовательность элементов". Используйте, например,List
Если вам явно нужно количество элементов. Если вы используете Linq имейте в виду, что метод расширенияCount()
может фактически пересчитать количество элементов каждый раз, когда вы вызываете его.