explained - list ienumerable c#
IEnumerable no tiene un método Count (4)
Tengo el siguiente método:
public bool IsValid
{
get { return (GetRuleViolations().Count() == 0); }
}
public IEnumerable<RuleViolation> GetRuleViolations(){
//code here
}
¿Por qué cuando hago .Count()
arriba, está subrayado en rojo?
Tuve el siguiente error:
El error 1 ''System.Collections.Generic.IEnumerable'' no contiene una definición para ''Count'' y no se puede encontrar ningún método de extensión ''Count'' que acepte un primer argumento de tipo ''System.Collections.Generic.IEnumerable'' (¿falta un ¿uso de directivas o una referencia de ensamblado? c: / users / a / documents / visual studio 2010 / Projects / NerdDinner / NerdDinner / Models / Dinner.cs 15 47 NerdDinner
Añades:
using System.Linq;
en la parte superior de su fuente y asegúrese de tener una referencia al ensamblado System.Core.
Count()
es un método de extensión proporcionado por System.Linq.Enumerable
clase estática para LINQ to Objects, y System.Linq.Queryable
para LINQ to SQL y otros proveedores fuera de proceso.
EDITAR: De hecho, usar Count()
aquí es relativamente ineficiente (al menos en LINQ to Objects). Todo lo que quieres saber es si hay elementos o no, ¿verdad? En ese caso, Any()
es un mejor ajuste:
public bool IsValid
{
get { return !GetRuleViolations().Any(); }
}
Qué tal si:
public bool IsValid
{
get { return (GetRuleViolations().Cast<RuleViolation>().Count() == 0); }
}
Any()
métodos Any()
o Count()
en Linq funcionan solo para tipos genéricos.
IEnumerable<T>
Si tiene un IEnumerable
simple sin un tipo, intente usar
IEnumerable<object>
en lugar.
IEnumeration
no tiene un método llamado Count()
. Es solo una especie de "secuencia de elementos". Utilice, por ejemplo, List
si necesita explícitamente la cantidad de elementos. Si usa Linq, tenga en cuenta que el método de extensión Count()
puede volver a contar el número de elementos cada vez que lo llame.