Quelle est la «meilleure» façon (en tenant compte à la fois de la vitesse et de la lisibilité) pour déterminer si une liste est vide? Même si la liste est de type IEnumerable<T>
et n'a pas de propriété Count.
En ce moment, je me balance entre ceci:
if (myList.Count() == 0) { ... }
et ça:
if (!myList.Any()) { ... }
Je suppose que la deuxième option est plus rapide, car elle reviendra avec un résultat dès qu'elle verra le premier élément, tandis que la deuxième option (pour un IEnumerable) devra visiter chaque élément pour renvoyer le décompte.
Cela étant dit, la deuxième option vous paraît-elle aussi lisible? Lequel préférez-vous? Ou pouvez-vous penser à une meilleure façon de tester une liste vide?
La réponse de Edit @ lassevk semble être la plus logique, associée à un peu de vérification à l'exécution pour utiliser un nombre mis en cache si possible, comme ceci:
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()
équivalent à list.IsEmpty
? La méthode du framework doit être optimisée - cela ne vaut la peine d'en écrire une nouvelle que si vous avez compris que c'est un goulot d'étranglement de performance.
IsEmpty
méthode d'extension. github.com/dotnet/corefx/issues/35054 S'il vous plaît vérifier et voter si vous aimez et acceptez.
is
etcast
mais utiliseras
etnull
vérifier:ICollection<T> collection = list as ICollection<T>; if (collection != null) return colllection.Count;