Ienumerable não tem um método de contagem
-
27-09-2019 - |
Pergunta
Eu tenho o seguinte método:
public bool IsValid
{
get { return (GetRuleViolations().Count() == 0); }
}
public IEnumerable<RuleViolation> GetRuleViolations(){
//code here
}
Por que quando eu faço .Count()
Acima, está sublinhado em vermelho?
Recebi o seguinte erro:
Erro 1 'System.Collection.Genic.iEnumerable' não contém uma definição para 'contagem' e nenhum método de extensão 'contagem' aceitando um primeiro argumento do tipo 'System.Collection.Genic.ienumerable' poderia ser encontrado (você está perdendo um Usando a diretiva ou uma referência de montagem?) C: Usuários A Documents Visual Studio 2010 Projects Nerddinner Nerddinner Models Dinner.cs 15 47 Nerddinner
Solução
Você adiciona:
using System.Linq;
na parte superior da sua fonte e verifique se você tem uma referência ao conjunto do sistema.Core.
Count()
é um método de extensão fornecido pelo System.Linq.Enumerable
classe estática para Linq para objetos e System.Linq.Queryable
Para o LINQ para SQL e outros fornecedores fora de processo.
Editar: de fato, usando Count()
Aqui está relativamente ineficiente (pelo menos no LINQ para objetos). Tudo que você quer saber é se existem algum Elementos ou não, certo? Nesse caso, Any()
é um ajuste melhor:
public bool IsValid
{
get { return !GetRuleViolations().Any(); }
}
Outras dicas
Any()
ou Count()
Métodos no LINQ funcionam apenas para tipos genéricos.
IEnumerable<T>
Se você tem um simples IEnumerable
Sem tipo, tente usar
IEnumerable<object>
em vez de.
IEnumeration
não tem um método chamado Count()
. É apenas uma espécie de "sequência de elementos". Use, por exemplo List
Se você precisar explicitamente do número de elementos. Se você usar o LINQ, lembre -se de que o método de extensão Count()
pode realmente recontar o número de elementos cada vez que você chama.
Que tal:
public bool IsValid
{
get { return (GetRuleViolations().Cast<RuleViolation>().Count() == 0); }
}