Une méthode retourne une séquence de, IEnumerable<T>
, et vous voulez maintenant pour vérifier si il est vide. Comment recommandez-vous faire cela? Je suis à la recherche d'une bonne lisibilité et une bonne performance.
La première et la plus évidente consiste à vérifier que le nombre est supérieur à zéro:
if(sequence.Count() == 0)
A décent des raisons de lisibilité, mais terrible de la performance car il a fait passer à travers l'ensemble de la séquence.
Une méthode que j'ai parfois l'utilisation est la suivante:
if(!sequence.Any())
Ce n'est pas (que je sache) de passer par l'ensemble de la séquence, mais la lisibilité est un peu en arrière et mal à l'aise. (Lit beaucoup mieux si nous sommes vérifier que la séquence est pas vide si).
Une autre option est d'utiliser First
dans un try-catch, comme ceci:
try
{
sequence.First();
}
catch(InvalidOperationException)
{
// Do something
}
Pas une très jolie solution, et probablement aussi plus lente, puisque c'est à l'aide d'exceptions et d'autres choses. Pourrait empêcher que par l'utilisation d' FirstOrDefault
de cours, à l'exception de vous aurait un gros problème si le premier élément de la séquence en fait était la valeur par défaut ;)
Ainsi, tous les autres moyens de vérifier si une séquence est vide? Lequel utilisez-vous habituellement? Que l'on ne vous recommandons d'utiliser?
Remarque: Pour une lisibilité optimale j'ai sans doute l'un des ci-dessus des extraits dans un IsEmpty
méthode d'extension, mais je suis toujours curieux, puisque j'allais avoir à faire quelque chose à l'intérieur de cette méthode ainsi :p