[英]Is it fine to modify element of a List in foreach
我有一個 object 說人如下:
public class Person
{
public int Id {get; set:}
public int Age {get; set:}
public string Name {get; set:}
}
現在,如果我有一個像這樣的人的列表
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);
現在我想將列表中所有項目的名稱修改為 Joy,下面的方法也可以:
foreach(var item in listPerson)
{
item.name="Joy";
}
我沒有收到任何錯誤,並且項目的值也發生了變化,但是我遇到了以前的帖子,說我們不能使用 foreach 更改 IEnumerable。 如果上面的代碼方法是錯誤的,那么正確的方法是什么?
我看到以前的帖子說我們不能使用 foreach 更改 IEnumerable。
而你實際上並沒有這樣做。
該列表只是參考列表 - 您不會更改該參考列表。 您正在修改這些引用所引用的對象。
你可以把這個列表想象成街道上的房子。 關於在迭代序列時修改序列的“規則”是說“你不能改變街道上的房子”——但你不會改變那里的房子,你只是改變前門的顏色,這是允許的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.