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

Fev*_*er 0 c# foreach

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

我知道我可以通过使用传统的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)

谢谢!

Ser*_*rvy 7

首先,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是列表中项目的副本.您正在改变副本,使列表中的项目保持不变.如果你的列表包含可变数据,而不是不可变数据,你可以改变引用引用,而不是改变引用本身和一个foreachForEach将工作正常.

  • @gleng Sprelling很难. (3认同)