J'utilise la nouvelle version 6 de Resharper. À plusieurs endroits dans mon code, il a souligné du texte et m'a averti qu'il pouvait y avoir un problème de sécurité. Énumération multiple possible de IEnumerable .
Je comprends ce que cela signifie, et j'ai suivi les conseils le cas échéant, mais dans certains cas, je ne suis pas sûr que ce soit vraiment un problème.
Comme dans le code suivant :
var properties = Context.ObjectStateManager.GetObjectStateEntry(this).GetModifiedProperties();
if (properties.Contains("Property1") || properties.Contains("Property2") || properties.Contains("Property3")) {
...
}
C'est souligner chaque mention de properties
sur la deuxième ligne, avertissant que je suis en train d'énumérer sur ce IEnumerable plusieurs fois.
Si j'ajoute .ToList()
à la fin de la ligne 1 (en tournant properties
d'un IEnumerable<string>
à un List<string>
), les avertissements disparaissent.
Mais sûrement, si je le convertis en une liste, alors il va énumérer sur l'IEnumerable entier pour construire la liste en premier lieu, et ensuite énumérer sur la liste comme requis pour trouver les propriétés (c'est-à-dire 1 énumération complète, et 3 énumérations partielles). Alors que dans mon code original, il ne fait que les 3 énumérations partielles.
Ai-je tort ? Quelle est la meilleure méthode ici ?