如何转换List中的所有字符串 使用 LINQ 转小写?

发布于 2024-07-08 12:03:27 字数 374 浏览 7 评论 0原文

昨天,我在 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

故事和酒 2024-07-15 12:03:27

最简单的方法:

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

与示例代码没有太大不同。 ForEach 循环原始列表,而 ConvertAll 创建一个需要重新分配的新列表。

Easiest approach:

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

Not too much different than your example code. ForEach loops the original list whereas ConvertAll creates a new one which you need to reassign.

忘羡 2024-07-15 12:03:27

这是因为 ToLower 返回一个小写字符串,而不是转换原始字符串。 所以你想要这样的东西:

List<string> lowerCase = myList.Select(x => x.ToLower()).ToList();

That's because ToLower returns a lowercase string rather than converting the original string. So you'd want something like this:

List<string> lowerCase = myList.Select(x => x.ToLower()).ToList();
半衬遮猫 2024-07-15 12:03:27

ForEach 使用 Action,这意味着如果 x 不是不可变的,您可能会影响它。 由于 x 是字符串,因此它是不可变的,因此您在 lambda 中对其执行的任何操作都不会更改其属性。 Kyralessa 的解决方案是您的最佳选择,除非您想实现自己的扩展方法来返回替换值。

ForEach uses Action<T>, which means that you could affect x if it were not immutable. Since x is a string, 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.

风蛊 2024-07-15 12:03:27
[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");
}
[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");
}
宛菡 2024-07-15 12:03:27
var _reps = new List(); // with variant data

_reps.ConvertAll<string>(new Converter<string,string>(delegate(string str){str = str.ToLower(); return str;})).Contains("invisible"))
var _reps = new List(); // with variant data

_reps.ConvertAll<string>(new Converter<string,string>(delegate(string str){str = str.ToLower(); return str;})).Contains("invisible"))
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文