【问题标题】:How to Convert all strings in List<string> to lower case using LINQ?如何使用 LINQ 将 List<string> 中的所有字符串转换为小写?
【发布时间】:2010-09-18 20:39:30
【问题描述】:

我昨天在 StackOverflow 上的一个回复中看到了一段代码 sn-p,这让我很感兴趣。是这样的:

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

 myList.ForEach(d=>d.ToLower());

我希望我可以使用它将 myList 中的所有项目转换为小写。但是,它并没有发生......运行后,myList中的大小写没有改变。

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

谢谢, 最大

【问题讨论】:

    标签: c# linq lambda foreach


    【解决方案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"))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-02-23
        • 1970-01-01
        • 1970-01-01
        • 2010-10-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-11-30
        相关资源
        最近更新 更多