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

Foi útil?

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); }
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top