我很想知道,我不太确定,但请帮助我。
如果您有一个List项,并且有一个对象需要更改它的属性。 假设myClass有一个字符串属性“status”。我正在使用for循环搜索我的列表,然后我得到了我的对象
myClass item = items[i];
如果我想更改“status”属性,我会这样做:
item.Status = "new status";
我的问题是:“item”仍然链接到列表项,因此如果我执行上面的行,它将在列表中更改,而不必设置此项:
items[i] = item;
希望这很清楚。
提前致谢。
答案 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];
时,item
和items[i]
都会引用它。
因此当您更改其中一个属性item.Status = "new status";
时,您实际上正在对myClass对象进行更改,该对象现在有两个名称item
和items[i]
。
您也可以使用item[i].Status = "new status";
。两者都做同样的工作。
设置items[i] = item;
无效,因为两者都已引用同一个对象。