Surmonter les avertissements d'énumération multiple pour IEnumerable
Lorsqu'ils travaillent avec IEnumerable dans le code, les développeurs sont souvent confrontés à l'avertissement « Énumération multiple possible de IEnumerable ». Ce problème survient lorsque vous tentez de parcourir la collection plusieurs fois, ce qui entraîne des résultats imprévisibles. Résoudre cet avertissement tout en préservant la fonctionnalité du code peut être un défi.
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; }
Dans cet exemple, le paramètre objets est défini comme IEnumerable, permettant aux appelants de transmettre divers types de collectes. Cependant, comme IEnumerable ne garantit pas une seule énumération, y accéder plusieurs fois déclenche l'avertissement.
Pour résoudre ce problème, les options suivantes existent :
Convertir en IList
La modification des objets en type IList ou ICollection clarifie l'attente selon laquelle le paramètre transmis doit être une collection qui peut être énumérée plusieurs fois. Cette solution élimine l'avertissement mais présente l'inconvénient d'obliger les appelants à convertir explicitement un IEnumerable standard en liste ou en collection.
Convertir au début de la méthode
Une autre approche consiste à convertissez immédiatement le IEnumerable en List au début de la méthode :
public List<object> Foo(IEnumerable<object> objects) { var objectList = objects.ToList(); // ... }
Bien que cette approche résout l'avertissement, elle ajoute un étape supplémentaire dans le code et peut introduire une surcharge inutile pour des collections potentiellement volumineuses.
La solution recommandée consiste à concevoir la méthode pour gérer explicitement plusieurs énumérations. Ceci peut être réalisé en définissant le paramètre objets comme une interface qui combine IEnumerable, Count et Indexer, sans méthodes Add/Remove. Actuellement, une telle interface n'existe pas dans .NET.
En s'adaptant à ces approches, les développeurs peuvent gérer efficacement les avertissements associés à plusieurs énumérations de IEnumerable, garantissant ainsi la clarté du code et un comportement prévisible.
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!