复制原始值时的局部变量

时间:2013-11-18 06:59:09

标签: c# variables

我想澄清C#中的局部变量。

当我有一个List<SomeClass> listSomeClass时,我有一个局部变量:

var localVar = listSomeClass[n]; 

对局部变量的任何更改都将更改listSomeClass[n]

中的变量

然而,如果我有第二个局部变量通过第一个局部变量访问该类的属性。这实际上是属性的副本,对此的任何更改都不会影响{ {1}}。

即:

listSomeClass[n].SomeProperty

但是,如果我通过列表访问,它确实会更改属性。

即。

var localProperty = localVar.SomeProperty 

这对于非基元的所有字段都是正确的吗?或者是因为列表和词典返回引用?

1 个答案:

答案 0 :(得分:1)

  

“对局部变量的任何更改都将改变变量   listSomeClass [N]“

不完全是。您对本地变量引用的对象所做的任何更改都将影响listSomeClass[n]项引用的对象,因为它是同一个对象。

如果更改局部变量,即为其指定不同的引用,则不会影响项listSomeClass[n]或其引用的对象。

  

“如果我有第二个局部变量来访问它的属性   通过第一个局部变量类。这实际上是一份副本   财产和对此的任何更改都不会影响   listSomeClass [N] .SomeProperty“

这完全取决于财产的类型。第二个局部变量中的值始终是属性中值的副本,但这并不意味着它不会影响属性。

如果属性是值类型,则第二个局部变量是值的副本,更改局部变量对属性没有影响。

如果属性是引用类型,则局部变量是引用的副本,但这意味着局部变量和属性都引用同一对象。然后将第二个局部变量应用为第一个局部变量;更改变量引用的对象会影响proeperty,因为它引用同一个对象,但更改局部变量本身的值不会影响属性。