Maison > développement back-end > C++ > Comment puis-je éviter l'avertissement « Énumération multiple possible de IEnumerable » en C# ?

Comment puis-je éviter l'avertissement « Énumération multiple possible de IEnumerable » en C# ?

Linda Hamilton
Libérer: 2025-01-04 14:48:40
original
716 Les gens l'ont consulté

How Can I Avoid the

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;
}
Copier après la connexion

Une façon de éviter l'avertissement d'énumération multiple consiste à modifier le paramètre de méthode pour accepter un List au lieu de IEnumerable. Cependant, cette approche n'est pas toujours réalisable, surtout si vous souhaitez conserver l'accès à l'objet le plus élevé de la collection.

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();
    // ...
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal