2012-02-02 35 views
3

现在,我知道这可能是一个新手问题,但我总是把这个问题搞砸了。列表中的对象关系?

我有一个包含一堆对象的列表,但后来在我的代码中查询列表以使用LINQ修改其中一个对象。

这样做是否会更新列表中的对象,或者我将不得不从列表中删除对象的旧实例,然后将我拔出的对象放回到列表中以确保已更改的值已存储在列表中?该清单只是一个简单的List<MyObject>

回答

5

重要的是要记住的是,名单包含对象。它包含参考文献到对象。所以,如果你这样做:

List<Foo> foos = GetListOfFooFromSomewhere(); 
Foo foo = foos[0]; 
foo.Name = "Some other name"; 

,只有一个Foo参与对象 - 但无论是列表和局部变量有相同的对象的引用。对象的更改不需要“传播”到列表中,因为该列表首先没有该数据。

我有时候用的一个比喻是:如果我给两个人我的家庭住址写在纸上,其中一个人把我的前门涂成红色,那么如果另一个人去我家,他们会看到一个红色的前门。这些纸是不同的,但它们不包含“我的房子” - 它们只包含到我家的。只有一个房子。

(这是假设Foo是一个类,如果你有一个可变结构列表,那么这个列表实际上包含的是直接的数据,而不是引用,我个人会避免使用可变结构来开始。

+0

非常感谢:) ..总是混合起来:) – Inx 2012-02-02 13:32:59

3

.NET的内置列表包含对元素的引用。

因此,如果你说:

var mySomething = myList[3]; 

然后

mySomething.Value = 19; 

,然后你会看到

myList[3].Value == 19