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
创建一个需要重新分配的新列表.
Rya*_*ndy 43
那是因为ToLower 返回一个小写字符串而不是转换原始字符串.所以你想要这样的东西:
List<string> lowerCase = myList.Select(x => x.ToLower()).ToList();
Run Code Online (Sandbox Code Playgroud)
ForEach
使用Action<T>
,这意味着x
如果它不是不可变的,您可能会产生影响。由于x
是 a string
,所以它是不可变的,因此您在 lambda 中对其执行的任何操作都不会更改其属性。Kyralessa 的解决方案是您的最佳选择,除非您想实现自己的扩展方法来返回替换值。