2010-05-18 77 views
2

我想知道,我真的不确定,但帮助我在​​这里。从列表中选择它后,对象仍然链接(引用)?

如果您有一个List项目,并且有一个对象需要更改它的一个属性。假设myClass有一个字符串属性“status”。我在寻找一个for循环我的列表,并让我的对象,所以我做

myClass item = items[i]; 

,如果我想改变“身份”属性,我这样做,例如:

item.Status = "new status"; 

我的问题/问题是这样的:为“项目”仍挂列表项的,所以如果我执行上面的线,将在列表中也改变了,而不必设置此:

items[i] = item; 

希望这很清楚。

在此先感谢。

回答

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;没有效果,因为两者都已经引用同一个对象。

2

是的,你正在改变列表中的项目。您不需要再次将其分配给列表。

+0

是什么让这种情况发生? – Terry 2010-05-18 11:56:35

+0

假设myClass确实是一个类而不是结构体:-) – 2010-05-18 11:57:16

+0

@Jakob:即使它是一个结构体,它也是如此,只要它不是不可变的。 – 2010-05-18 12:49:29

3

这两个列表和item变量都有引用到实际的对象。您对该对象所做的任何更改都可以通过任一参考进行查看。

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

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

(这是所有假设myClass真的是一类,顺便说一句。)

2

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

相关问题