Maison >développement back-end >C++ >Comment puis-je éviter l'avertissement « Énumération multiple possible de IEnumerable » en C# ?
Gérer les dangers de l'énumération multiple de IEnumerable
Lorsqu'ils travaillent avec des collections IEnumerable, les développeurs rencontrent souvent l'avertissement « Énumération multiple possible de IEnumerable ," qui se produit lorsque la collection est itérée plusieurs fois. Ce problème peut être problématique, en particulier lorsque vous travaillez avec certains types de collections, telles que celles représentant des requêtes de base de données ou d'autres opérations coûteuses.
Considérez l'extrait de code suivant :
public List<object> Foo(IEnumerable<object> objects) { if (objects == null || !objects.Any()) throw new ArgumentException(); var firstObject = objects.First(); var list = DoSomeThing(firstObject); var secondList = DoSomeThingElse(objects); list.AddRange(secondList); return list; }
Une façon de éviter l'avertissement d'énumération multiple consiste à modifier le paramètre de méthode pour accepter un List
Une autre option consiste à convertir le IEnumerable en liste au début de la méthode :
public List<object> Foo(IEnumerable<object> objects) { var objectList = objects.ToList(); // ... }
Bien que cette technique soit efficace pour empêcher l'avertissement, elle peut sembler gênante et inutilement verbeuse.
La clé pour comprendre cela le problème réside dans la sémantique véhiculée par la signature de la méthode. Passer un paramètre IEnumerable implique que l'appelant anticipe que la méthode énumérera la collection une seule fois. En acceptant un IList ou ICollection, vous communiquez explicitement vos attentes concernant la collecte aux appelants, réduisant ainsi les risques de malentendus et d'erreurs coûteuses.
Dans les situations où l'utilisation d'un IEnumerable est essentielle, il est conseillé d'effectuer la ToList( ) conversion au début de la méthode. Cela garantit que les itérations suivantes ne rencontreront pas l'avertissement d'énumération multiple.
Il est regrettable que .NET ne fournisse pas une interface qui encapsule les fonctionnalités de IEnumerable, Count et un indexeur sans les méthodes d'ajout ou de suppression. Une telle interface simplifierait grandement ce problème et fournirait une solution plus propre et plus concise.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!