如何使用LINQ将List <string>中的所有字符串转换为小写?

Max*_*ing 87 c# linq foreach lambda

昨天我在StackOverflow上的一个回复中看到了一个代码片段,这引起了我的兴趣.它是这样的:

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

 myList.ForEach(d=>d.ToLower());
Run Code Online (Sandbox Code Playgroud)

我希望我可以使用它将myList中的所有项目转换为小写.但是,它不会发生...运行此命令后,myList中的大小不变.

所以我的问题是,是否有一种方法,使用LINQ和Lambda表达式轻松地迭代并以类似于此的方式修改列表的内容.

谢谢,马克斯

Jas*_*ing 162

最简单的方法:

myList = myList.ConvertAll(d => d.ToLower());
Run Code Online (Sandbox Code Playgroud)

与您的示例代码没有太大区别.ForEach循环原始列表,同时ConvertAll创建一个需要重新分配的新列表.

  • 不是扩展方法. (4认同)
  • 并且字符串是不可变的:P (2认同)

Rya*_*ndy 43

那是因为ToLower 返回一个小写字符串而不是转换原始字符串.所以你想要这样的东西:

List<string> lowerCase = myList.Select(x => x.ToLower()).ToList();
Run Code Online (Sandbox Code Playgroud)

  • 此解决方案也适用于.NET Core,.NET Core中不存在ConvertAll. (6认同)

Mic*_*ows 5

ForEach使用Action<T>,这意味着x如果它不是不可变的,您可能会产生影响。由于x是 a string,所以它是不可变的,因此您在 lambda 中对其执行的任何操作都不会更改其属性。Kyralessa 的解决方案是您的最佳选择,除非您想实现自己的扩展方法来返回替换值。