¿Cuál es la forma "mejor" (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.Comprobando si una lista está vacía con LINQ
En este momento estoy lanzando entre el presente:
if (myList.Count() == 0) { ... }
y esto:
if (!myList.Any()) { ... }
Mi conjetura es que la segunda opción es más rápida, ya que va a volver con un resultado tan pronto como vea el primer elemento, mientras que la segunda opción (para un Enumerable) deberá visitar cada elemento para devolver el conteo.
Dicho esto, ¿la segunda opción le parece legible? ¿Cual preferirías? ¿O puede pensar en una mejor manera de probar una lista vacía?
Editar @ respuesta de lassevk parece ser la más lógica, junto con un poco de tiempo de ejecución de la comprobación de usar un recuento almacenado en caché si es posible, de esta manera:
public static bool IsEmpty<T>(this IEnumerable<T> list)
{
if (list is ICollection<T>) return ((ICollection<T>)list).Count == 0;
return !list.Any();
}
Mucho mejor, no mezcle 'is' y' cast', pero use 'as' y' null' check: 'ICollection collection = list as ICollection ; if (collection! = null) return colllection.Count; ' –
abatishchev
¿Por qué escribir un método extra? Is not is not 'list.Any()' equivalent to 'list.IsEmpty'? El método de marco debe ser optimizado; vale la pena escribir uno nuevo solo si descubrió que es un cuello de botella perf. – dbkk
¿Alguien se molestó en medir el rendimiento en sus implementaciones sugeridas o todos están desperdiciando ideas? –