C# 复制原始值时的局部变量
我想澄清C#中的局部变量 当我有一个C# 复制原始值时的局部变量,c#,variables,C#,Variables,我想澄清C#中的局部变量 当我有一个列表listSomeClass和一个局部变量时: var localVar = listSomeClass[n]; 对局部变量的任何更改都将更改listSomeClass[n] 然而,如果我有第二个局部变量,它通过第一个局部变量访问这个类的属性。这实际上是属性的副本,对此的任何更改都不会影响listSomeClass[n].SomeProperty i、 e: 但是,如果我通过列表访问它,它确实会更改属性 即 这是否适用于所有非基本体的字段?还是因为列表和
列表listSomeClass
和一个局部变量时:
var localVar = listSomeClass[n];
对局部变量的任何更改都将更改listSomeClass[n]
然而,如果我有第二个局部变量,它通过第一个局部变量访问这个类的属性。这实际上是属性的副本,对此的任何更改都不会影响listSomeClass[n].SomeProperty
i、 e:
但是,如果我通过列表访问它,它确实会更改属性
即
这是否适用于所有非基本体的字段?还是因为列表和字典返回一个引用
“对局部变量的任何更改都将更改中的变量
listSomeClass[n]“
不完全是。对局部变量引用的对象所做的任何更改都将影响listSomeClass[n]
item引用的对象,因为该对象是同一个对象
如果更改局部变量,即为其指定不同的引用,则不会影响项listSomeClass[n]
或其引用的对象
“如果我有第二个局部变量访问此
通过第一个局部变量初始化。这实际上是
属性及其任何更改都不会影响
listSomeClass[n].SomeProperty“
这完全取决于财产的类型。第二个局部变量中的值始终是属性中的值的副本,但这并不意味着它不会影响属性
如果属性是值类型,则第二个局部变量是该值的副本,更改局部变量对属性没有影响
如果属性是引用类型,则局部变量是引用的副本,但这意味着局部变量和属性都引用同一对象。这同样适用于作为第一局部变量的第二局部变量;更改变量引用的对象将影响项目,因为它引用的是同一对象,但更改局部变量本身的值不会影响属性。如何添加到列表?(代码)如果
SomeProperty
是引用类型,则任何更改也将反映在列表中。嗯,你的困惑与局部变量无关。你需要一个关于“是”的教程——这完全取决于类型。值类型(原语、枚举、结构)被复制,引用类型(类)只包含引用,所以如果您通过局部变量或索引器访问它,则是irelevant。如果你有一个列表,即使设置localVar也不会起作用。正如我前面所说的,它不是关于局部变量的,而是关于赋值的。在.net中,我们不把它称为指向我们所说的reference
地址的指针。你说的对。
var localProperty = localVar.SomeProperty
var localProperty = listSomeClass[n].SomeProperty