如何转换List中的所有字符串 使用 LINQ 转小写?
昨天,我在 StackOverflow 上的一个回复中看到了一段代码片段,这引起了我的兴趣。 它是这样的:
List<string> myList = new List<string> {"aBc", "HELLO", "GoodBye"};
myList.ForEach(d=>d.ToLower());
我希望我可以用它来将 myList 中的所有项目转换为小写。 然而,它并没有发生......运行后, myList 中的大小写没有改变。
所以我的问题是是否有一种方法,使用 LINQ 和 Lambda 表达式以与此类似的方式轻松迭代和修改列表的内容。
谢谢, 最大限度
I saw a code snippet yesterday in one of the responses here on StackOverflow that intrigued me. It was something like this:
List<string> myList = new List<string> {"aBc", "HELLO", "GoodBye"};
myList.ForEach(d=>d.ToLower());
I was hoping I could use it to convert all items in myList to lowercase. However, it doesn't happen... after running this, the casing in myList is unchanged.
So my question is whether there IS a way, using LINQ and Lambda expressions to easily iterate through and modify the contents of a list in a manner similar to this.
Thanks,
Max
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
最简单的方法:
与示例代码没有太大不同。
ForEach
循环原始列表,而ConvertAll
创建一个需要重新分配的新列表。Easiest approach:
Not too much different than your example code.
ForEach
loops the original list whereasConvertAll
creates a new one which you need to reassign.这是因为 ToLower 返回一个小写字符串,而不是转换原始字符串。 所以你想要这样的东西:
That's because ToLower returns a lowercase string rather than converting the original string. So you'd want something like this:
ForEach
使用Action
,这意味着如果x
不是不可变的,您可能会影响它。 由于 x 是字符串,因此它是不可变的,因此您在 lambda 中对其执行的任何操作都不会更改其属性。 Kyralessa 的解决方案是您的最佳选择,除非您想实现自己的扩展方法来返回替换值。ForEach
usesAction<T>
, which means that you could affectx
if it were not immutable. Sincex
is astring
, it is immutable, so nothing you do to it in the lambda will change its properties. Kyralessa's solution is your best option unless you want to implement your own extension method that allows you to return a replacement value.