Comment convertir toutes les chaînes de la liste < string > en minuscule en utilisant LINQ?

StackOverflow https://stackoverflow.com/questions/230973

  •  04-07-2019
  •  | 
  •  

Question

J'ai vu un extrait de code hier dans l'une des réponses ici sur StackOverflow qui m'a intrigué. C'était quelque chose comme ça:

 List<string> myList = new List<string> {"aBc", "HELLO", "GoodBye"};

 myList.ForEach(d=>d.ToLower());

J'espérais pouvoir l'utiliser pour convertir tous les éléments de myList en minuscules. Cependant, cela n'arrive pas ... après avoir exécuté ceci, le boîtier dans myList est inchangé.

Ma question est donc de savoir s'il existe un moyen, en utilisant les expressions LINQ et Lambda, de facilement parcourir et modifier le contenu d'une liste de la même manière.

Merci, Max

Était-ce utile?

La solution

Approche la plus simple:

myList = myList.ConvertAll(d => d.ToLower());

Pas très différent de votre exemple de code. ForEach boucle la liste d'origine alors que ConvertAll en crée une nouvelle que vous devez réaffecter.

Autres conseils

En effet, ToLower renvoie une chaîne en minuscule au lieu de convertir la chaîne d'origine. Donc, vous voudriez quelque chose comme ça:

List<string> lowerCase = myList.Select(x => x.ToLower()).ToList();
[TestMethod]
public void LinqStringTest()
{
    List<string> myList = new List<string> { "aBc", "HELLO", "GoodBye" };
    myList = (from s in myList select s.ToLower()).ToList();
    Assert.AreEqual(myList[0], "abc");
    Assert.AreEqual(myList[1], "hello");
    Assert.AreEqual(myList[2], "goodbye");
}

ForEach utilise Action < T > , ce qui signifie que vous pourriez affecter x s'il n'était pas immuable. Puisque x est une chaîne , il est immuable, vous ne lui ferez rien dans le lambda qui modifiera ses propriétés. La solution de Kyralessa est votre meilleure option, sauf si vous souhaitez implémenter votre propre méthode d'extension vous permettant de renvoyer une valeur de remplacement.

var _reps = new List(); // with variant data

_reps.ConvertAll<string>(new Converter<string,string>(delegate(string str){str = str.ToLower(); return str;})).Contains("invisible"))
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top