如何使用 LINQ 将 List<string> 中的所有字符串转换为小写?
Posted
技术标签:
【中文标题】如何使用 LINQ 将 List<string> 中的所有字符串转换为小写?【英文标题】:How to Convert all strings in List<string> to lower case using LINQ? 【发布时间】:2010-09-18 20:39:30 【问题描述】:我昨天在 *** 上的一个回复中看到了一段代码 sn-p,这让我很感兴趣。是这样的:
List<string> myList = new List<string> "aBc", "HELLO", "GoodBye";
myList.ForEach(d=>d.ToLower());
我希望我可以使用它将 myList 中的所有项目转换为小写。但是,它并没有发生......运行后,myList中的大小写没有改变。
所以我的问题是,是否有一种方法,使用 LINQ 和 Lambda 表达式以类似于此的方式轻松遍历和修改列表的内容。
谢谢, 最大
【问题讨论】:
【参考方案1】:最简单的方法:
myList = myList.ConvertAll(d => d.ToLower());
与您的示例代码没有太大区别。 ForEach
循环原始列表,而 ConvertAll
创建一个您需要重新分配的新列表。
【讨论】:
@leppie: 确实,这不是——很好。在这种情况下,担心是实例方法还是扩展方法可能有点迂腐,但绝对准确。 :) 而且字符串是不可变的:P【参考方案2】:这是因为 ToLower 返回小写字符串而不是转换原始字符串。所以你会想要这样的东西:
List<string> lowerCase = myList.Select(x => x.ToLower()).ToList();
【讨论】:
我比接受的答案更喜欢这种方法,因为您可以将它与任何 IEnumerableForEach
使用Action<T>
,这意味着如果x
不是不可变的,您可以影响它。因为x
是string
,所以它是不可变的,所以你在lambda 中对它所做的任何事情都不会改变它的属性。 Kyralessa 的解决方案是您的最佳选择,除非您想实现自己的扩展方法以允许您返回替换值。
【讨论】:
如果您不确定,请做更多的研究……还记得什么吗? 错误是人为的,我提供的链接粗体为 3.5,正常为 2.0,我没看到。我已经删除了我的帖子……您的简单评论就足够了。你想无缘无故地投反对票,而不是现在假设。 虽然我在将近一年后才写这篇文章,虽然我不是 Daok,但我会告诉你为什么你的答案是“错误的”——你说“Kyralessa 的解决方案是你最好的选择” 't - 我的解决方案更清晰。【参考方案4】:[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");
【讨论】:
【参考方案5】:var _reps = new List(); // with variant data
_reps.ConvertAll<string>(new Converter<string,string>(delegate(string str)str = str.ToLower(); return str;)).Contains("invisible"))
【讨论】:
以上是关于如何使用 LINQ 将 List<string> 中的所有字符串转换为小写?的主要内容,如果未能解决你的问题,请参考以下文章
如何解决 - 无法使用Automapper将Generic.List强制转换为Linq.IQueryable?