¿Cuál es la mejor forma (teniendo en cuenta tanto la velocidad como la legibilidad) para determinar si una lista está vacía? Incluso si la lista es de tipo IEnumerable<T>
y no tiene una propiedad Count.
En este momento estoy dando vueltas entre esto:
if (myList.Count() == 0) { ... }
y esto:
if (!myList.Any()) { ... }
Supongo que la segunda opción es más rápida, ya que volverá con un resultado tan pronto como vea el primer elemento, mientras que la segunda opción (para un IEnumerable) necesitará visitar cada elemento para devolver el conteo.
Dicho esto, ¿te parece legible la segunda opción? ¿Cual preferirías? ¿O puedes pensar en una mejor manera de probar una lista vacía?
La respuesta de Edit @ lassevk parece ser la más lógica, junto con un poco de verificación de tiempo de ejecución para usar un recuento en caché si es posible, como este:
public static bool IsEmpty<T>(this IEnumerable<T> list)
{
if (list is ICollection<T>) return ((ICollection<T>)list).Count == 0;
return !list.Any();
}
list.Any()
equivalente a list.IsEmpty
? El método del marco debe optimizarse: vale la pena escribir uno nuevo solo si descubriste que es un cuello de botella de perf.
IsEmpty
método de extensión. github.com/dotnet/corefx/issues/35054 Verifique y vote si lo desea y acepta.
is
ycast
useas
ynull
verifique:ICollection<T> collection = list as ICollection<T>; if (collection != null) return colllection.Count;