簡體   English   中英

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

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM