J'avais besoin d'une méthode qui pourrait prendre une collection de chaînes et remplacer toutes les occurrences d'une chaîne spécifique par une autre.L'instruction LINQ ne fonctionne plus après avoir été enveloppée dans une méthode d'extension
Par exemple, si j'ai un List<string>
qui ressemble à ceci:
List<string> strings = new List<string> { "a", "b", "delete", "c", "d", "delete" };
et je veux remplacer "supprimer" par "", j'utiliser cette déclaration LINQ:
strings = (from s in strings select (s=="delete" ? s=String.Empty : s)).ToList();
et ça marche très bien. Mais alors j'ai pensé que je devrais en faire une méthode d'extension, puisque je l'utiliserais probablement plus tard. Dans ce cas, je veux juste écrire:
strings.ReplaceStringInListWithAnother("delete", String.Empty);
Alors que mon code compile, et l'instruction LINQ fonctionne à l'intérieur de la méthode d'extension, quand je retourne la collection revient à son contenu d'origine:
Donc il semblerait que je viens de modifier une copie de la liste ... mais quand j'ai regardé le code pour Pop, il modifie la collection de manière similaire, mais les changements restent, donc mon hypothèse était que les déclarations de paramètres de ma méthode sont corrects. Est-ce que quelqu'un peut expliquer ce que je fais mal ici?
En règle générale, il n'est plus nécessaire d'utiliser 'string.Empty'. C'est un vestige de C# 1.0. Votre code sera plus lisible si vous utilisez juste "" "'. – Timwi