我有一个如下列表,我想添加一个“!”在字符串列表的每个元素的末尾。
我知道我可以通过使用传统的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 += "!");
谢谢!
答案 0 :(得分:7)
首先,ForEach
是List
的方法,而不是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
是列表中项目的副本。您正在改变副本,使列表中的项目保持不变。如果您的列表包含可变数据而不是不可变数据,则可以改变引用所引用的项,而不是变更引用本身和foreach
或ForEach
可以正常工作。
答案 1 :(得分:1)
var newList = list.Select( x => x + "!" ).ToList()