Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 复制原始值时的局部变量_C#_Variables - Fatal编程技术网

C# 复制原始值时的局部变量

C# 复制原始值时的局部变量,c#,variables,C#,Variables,我想澄清C#中的局部变量 当我有一个列表listSomeClass和一个局部变量时: var localVar = listSomeClass[n]; 对局部变量的任何更改都将更改listSomeClass[n] 然而,如果我有第二个局部变量,它通过第一个局部变量访问这个类的属性。这实际上是属性的副本,对此的任何更改都不会影响listSomeClass[n].SomeProperty i、 e: 但是,如果我通过列表访问它,它确实会更改属性 即 这是否适用于所有非基本体的字段?还是因为列表和

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

当我有一个
列表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