C#使用List.ForEach操作字符串列表

时间:2013-12-16 18:47:03

标签: c# foreach

我有一个如下列表,我想添加一个“!”在字符串列表的每个元素的末尾。

我知道我可以通过使用传统的foreach轻松实现这一目标。我想知道如何用list.ForEach()做到这一点?

List<string> list = new List<string>();
list.Add("Hi");
list.Add("Hey");
list.Add("Cool");
list.Add("Nice Day");

我试过这个,但由于某种原因它没有用。

list.ForEach(x => x += "!");

谢谢!

2 个答案:

答案 0 :(得分:7)

首先,ForEachList的方法,而不是LINQ方法。

接下来,在您的方法中,x是列表中项目的副本,您正在改变该副本以向其添加!,这就是为什么基础列表不受影响。

LINQ用于查询数据源,因此如果您想创建一个全新的序列/结构,其中包含列表中的所有字符串,但最后会有感叹号,您可以使用Select

var IMPORTANT = list.Select(s => s + "!");

如果您想改变项目,只需使用for循环:

for(int i = 0; i < list.Count; i++)
    list[i] += "!";

请注意,如果您尝试在此使用foreach循环,而不是for,则会遇到与ForEach方法完全相同的问题。考虑这种情况:

foreach(var s in list)
    s += "!";

此处s是列表中项目的副本。您正在改变副本,使列表中的项目保持不变。如果您的列表包含可变数据而不是不可变数据,则可以改变引用所引用的,而不是变更引用本身foreachForEach可以正常工作。

答案 1 :(得分:1)

var newList = list.Select( x => x + "!" ).ToList()