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 69

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() может фактически пересчитать количество элементов каждый раз, когда вы вызываете его.

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

IEnumerable<T>

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

IEnumerable<object> 

вместо.

Как насчет:

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