Answers:
最简单的方法:
myList = myList.ConvertAll(d => d.ToLower());
与您的示例代码没有太大不同。ForEach
循环原始列表,而ConvertAll
创建一个新列表,您需要重新分配它。
这是因为ToLower 返回的是小写字符串,而不是转换原始字符串。因此,您需要这样的东西:
List<string> lowerCase = myList.Select(x => x.ToLower()).ToList();
[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");
}
ForEach
使用Action<T>
,这意味着您可能会影响x
它是否不可改变。由于x
是string
,它是不可变的,因此您在lambda中对其执行的任何操作均不会更改其属性。除非您要实现自己的扩展方法以允许您返回替换值,否则Kyralessa的解决方案是您的最佳选择。