从列表中选择后,对象仍然链接(引用)?

时间:2010-05-18 11:52:23

标签: c# list reference

我很想知道,我不太确定,但请帮助我。

如果您有一个List项,并且有一个对象需要更改它的属性。 假设myClass有一个字符串属性“status”。我正在使用for循环搜索我的列表,然后我得到了我的对象

myClass item = items[i];

如果我想更改“status”属性,我会这样做:

item.Status = "new status";

我的问题是:“item”仍然链接到列表项,因此如果我执行上面的行,它将在列表中更改,而不必设置此项:

items[i] = item;

希望这很清楚。

提前致谢。

4 个答案:

答案 0 :(得分:3)

列表和item变量都有引用到实际对象。您通过引用可以看到对对象所做的任何更改。

换句话说...假设您查看电话簿,并选择一个特定的地址。您将地址复制到一张纸上,然后在那里开车。然后你把房子漆成红色。现在,任何在电话簿中查找相同地址并去那里的人都会看到一个红房子,即使他们还没有看到你的那张纸。

请查看我的article about value types and reference types了解更多信息。

(顺便说一句,这都假设myClass确实是一个班级。)

答案 1 :(得分:2)

是的,您正在更改列表中的项目。您无需再次将其分配给列表。

答案 2 :(得分:2)

是的,如果myClass是一个名称暗示的类(而不是结构),则它是reference type。因此,在您编写myClass item = items[i];时不会复制它。 item仅仅是对items[i]引用的同一对象的引用。

答案 3 :(得分:0)

代码item.Status = "new status";将更改列表项

items[i]指向myClass对象。

当您说myClass item = items[i];时,itemitems[i]都会引用它。

因此当您更改其中一个属性item.Status = "new status";时,您实际上正在对myClass对象进行更改,该对象现在有两个名称itemitems[i]

您也可以使用item[i].Status = "new status";。两者都做同样的工作。

设置items[i] = item;无效,因为两者都已引用同一个对象。