如何使用 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();

【讨论】:

我比接受的答案更喜欢这种方法,因为您可以将它与任何 IEnumerable 一起使用,而不仅仅是 List 此解决方案也适用于 .NET Core,ConvertAll 在 .NET Core 中不存在。【参考方案3】:

ForEach 使用Action&lt;T&gt;,这意味着如果x 不是不可变的,您可以影响它。因为xstring,所以它是不可变的,所以你在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> 中的所有字符串转换为小写?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Linq var 转换为 List

如何使用LINQ从列表中获取重复项?

如何解决 - 无法使用Automapper将Generic.List强制转换为Linq.IQueryable?

如何将两个连接表中的 IQueryable LINQ 结果返回到 List<string> 中?

如何使用 LINQ 从列表中获取重复项? [复制]

如何使用 List<object> 将对象值添加到 viewmodel