我有一个列表如下,我想添加一个"!" 在字符串列表的每个元素的末尾.
我知道我可以通过使用传统的foreach轻松实现这一目标.我想知道如何用list.ForEach()做到这一点?
List<string> list = new List<string>();
list.Add("Hi");
list.Add("Hey");
list.Add("Cool");
list.Add("Nice Day");
Run Code Online (Sandbox Code Playgroud)
我试过这个,但由于某种原因它没有用.
list.ForEach(x => x += "!");
Run Code Online (Sandbox Code Playgroud)
谢谢!
首先,ForEach是一种方法List,而不是LINQ方法.
接下来,在您的方法中,列表中有x一个项目的副本,并且您正在改变该副本以向其添加!,这就是基础列表不受影响的原因.
LINQ用于查询数据源,因此如果您想创建一个全新的序列/结构,其中包含列表中的所有字符串,但最后会有感叹号,您可以使用Select它:
var IMPORTANT = list.Select(s => s + "!");
Run Code Online (Sandbox Code Playgroud)
如果你想改变项目,只需使用for循环:
for(int i = 0; i < list.Count; i++)
list[i] += "!";
Run Code Online (Sandbox Code Playgroud)
请注意,如果您尝试在foreach此处使用循环而不是a for,则会遇到与您的ForEach方法完全相同的问题.考虑这种情况:
foreach(var s in list)
s += "!";
Run Code Online (Sandbox Code Playgroud)
这s是列表中项目的副本.您正在改变副本,使列表中的项目保持不变.如果你的列表包含可变数据,而不是不可变数据,你可以改变引用引用的项,而不是改变引用本身和一个foreach或ForEach将工作正常.