Dans le System.Linq
nous pouvons maintenant étendre notre de IEnumerable pour avoir le Tout() y Compter() méthodes d'extension .
On m'a dit récemment que si je veux vérifier qu'une collection contient 1 ou plusieurs éléments, je dois utiliser la fonction .Any()
au lieu de la méthode d'extension .Count() > 0
car la méthode d'extension .Count()
La méthode d'extension doit itérer à travers tous les éléments.
Deuxièmement, certaines collections ont un propriété (pas une méthode d'extension) qui est Count
ou Length
. Serait-il préférable de les utiliser, au lieu de .Any()
ou .Count()
?
yea / nae ?
0 votes
Il est préférable d'utiliser Any() sur les Enumérables et Count sur les Collections. Si quelqu'un pense qu'écrire '(somecollection.Count > 0)' sera source de confusion ou de problèmes de lisibilité, il vaut mieux l'écrire comme une méthode d'extension et la nommer Any(). Tout le monde sera alors satisfait. Du point de vue des performances et de la lisibilité. Ainsi, tout votre code sera cohérent et chaque développeur de votre projet ne devra pas s'inquiéter de choisir entre Count et Any.
2 votes
Vous avez vu Count() > 0 vs Any(), mais avez-vous vu Distinct().Count() > 1 vs Distinct().Skip(1).Any() ? Cette dernière est définitivement beaucoup plus rapide pour un grand nombre d'éléments où Count doit itérer sur l'ensemble pour obtenir un compte. Skip(1).Any() évite l'énumération complète. 100k itérations de la vérification d'un tableau de 1000 éléments avec des chaînes de 1 caractère qui s'exécute en environ 4000ms pour Count() > 1, s'exécute en seulement 20ms pour Skip(1).Any().