LINQを使用してList <string>のすべての文字列を小文字に変換する方法


94

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

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

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

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

したがって、私の質問は、LINQ式とLambda式を使用して、これと同様の方法でリストのコンテンツを簡単に反復して変更する方法があるかどうかです。

ありがとう、マックス

回答:


181

最も簡単なアプローチ:

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

サンプルコードとそれほど変わらない。ForEach元のリストをループしConvertAllますが、再割り当てが必要な新しいリストを作成します。


4
拡張メソッドではありません。
レッピー、2009

@leppie:確かにそうではありません。この場合、インスタンスメソッドなのか拡張メソッドなのかを気にするのは少し面倒かもしれませんが、間違いなく正確です。:)
Jason Bunting 2011

そして文字列は不変です:P
Sherlock

48

これ、ToLower 元の文字列を変換するのではなく、小文字の文字列を返すためです。したがって、次のようなものが必要になります。

List<string> lowerCase = myList.Select(x => x.ToLower()).ToList();

1
List <string>だけでなく、任意のIEnumerable <string>でこれを使用できるため、このアプローチは受け入れられた回答よりも優れています。
Joshua Pech 2015

6
このソリューションは.NET Coreでも機能し、ConvertAllは.NET Coreには存在しません。
ジョナス

3
[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

ForEachを使用Action<T>します。つまり、x不変でない場合に影響を与える可能性があります。以来xstring、それは不変なので、ラムダでそれにあなたが何もそのプロパティを変更しません。代わりの値を返すことができる独自の拡張メソッドを実装したくない場合を除き、Kyralessaのソリューションが最良のオプションです。


わからない場合は、さらに調査してください...何か覚えていますか?
Patrick Desjardins、

エラーは人間によるものであり、私が提供したリンクは太字で3.5、通常で2.0でしたが、私はそれを見ていません。私は私の投稿を削除しました...あなたからの簡単なコメントで十分でしょう。あなたは理由もなく、今考えているよりも反対票を投じたいと思っています。
Patrick Desjardins、

私はほぼ1年後にこれを書いていますが、私はDaokではありませんが、なぜあなたの答えが「間違っている」のかを教えます-そうではないときに「Kyralessaの解決策があなたの最良の選択肢である」とあなたは言った-私の解決策はよりクリーンでより明確。
Jason Bunting

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

_reps.ConvertAll<string>(new Converter<string,string>(delegate(string str){str = str.ToLower(); return str;})).Contains("invisible"))
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.