可以在foreach中修改List的元素吗

kan*_*ika 1 .net c# asp.net ienumerable list

我有一个对象说 Person 如下:

public class Person
{
    public int Id {get; set:}
    public int Age {get; set:}
    public string Name {get; set:}
}
Run Code Online (Sandbox Code Playgroud)

现在,如果我有一个像这样的人的列表

List<Person> listPerson = new List<Person>();
Person p = new Person { Id=1, Age=27, Name="John" };
listPerson.Add(p);
p = new Person { Id=2, Age=28, Name="Joy" };
listPerson.Add(p);
Run Code Online (Sandbox Code Playgroud)

现在我想将列表中存在的所有项目的名称修改为 Joy,所以以下方法可以:

foreach(var item in listPerson)
{
    item.name="Joy";
}
Run Code Online (Sandbox Code Playgroud)

我没有收到任何错误,并且该项目的值也发生了更改,但我发现之前的帖子说我们无法使用 foreach 更改 IEnumerable。如果上面的代码方法是错误的,那么正确的方法是什么?

Jon*_*eet 8

我看到之前的帖子说我们无法使用 foreach 更改 IEnumerable。

而你实际上并没有这样做。

该列表只是参考列表 - 您不会更改该参考列表。您正在修改这些引用引用的对象。

您可以将该列表想象成街道上的房屋。关于在迭代序列时修改序列的“规则”是说“你不能改变街道上的房屋” - 但你不会改变那里的房屋,你正在改变前门的颜色,这是允许的。