web-dev-qa-db-ja.com

LINQを使用してList <string>のすべての文字列を小文字に変換するにはどうすればよいですか?

StackOverflowのここでの応答の1つで、昨日コードスニペットを見て興味をそそられました。次のようなものでした:

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

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

MyListのすべての項目を小文字に変換するために使用できることを望んでいました。しかし、それは起こりません...これを実行した後、myListの大文字小文字は変更されません。

だから私の質問は、IS方法があるかどうか、LINQとLambdaの式を使用して、これに似た方法でリストの内容を簡単に反復および変更することです。

ありがとう、マックス

83
Max Schilling

最も簡単なアプローチ:

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

サンプルコードとそれほど違いはありません。 ForEachは元のリストをループしますが、ConvertAllは新しいリストを作成し、再割り当てする必要があります。

157
Jason Bunting

これは、ToLower returnsが元の文字列を変換するのではなく、小文字の文字列だからです。したがって、次のようなものが必要です。

List<string> lowerCase = myList.Select(x => x.ToLower()).ToList();
42
Ryan Lundy
[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");
}
3
marcumka

ForEachAction<T>を使用します。これは、不変でなければxに影響を与える可能性があることを意味します。 xstringであるため、不変であるため、ラムダでそれを実行してもプロパティは変更されません。 Kyralessaのソリューションは、置換値を返すことができる独自の拡張メソッドを実装する場合を除き、最適なオプションです。

3
Michael Meadows