Вопрос

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

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

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

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

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

Ошибка 1 'System.collections.generic.ienableable' не содержит определения для «count», и нет метода расширения «подсчет», принимая первый аргумент типа «System.Collections.generic.». Используя директиву или ссылку на сборку?) C: Users A Documents Visual Studio 2010 Projects Nerddinner Nerddinner Models Nunder.cs 15 47 Nerddinner

Это было полезно?

Решение

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

using System.Linq;

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

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

Редактировать: на самом деле, используя Count() Здесь относительно неэффективно (по крайней мере, в Linq к объектам). Все, что вы хотите знать, есть ли Любые элементы или нет, верно? В таком случае, Any() лучше подходит:

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

Другие советы

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

IEnumerable<T>

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

IEnumerable<object> 

вместо.

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

Как насчет:

public bool IsValid
{
    get { return (GetRuleViolations().Cast<RuleViolation>().Count() == 0); }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top