Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.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#_.net_Class_Wcf - Fatal编程技术网

C# 启动后临时变量值发生变化

C# 启动后临时变量值发生变化,c#,.net,class,wcf,C#,.net,Class,Wcf,温度值随原点值变化。换句话说,temp和origin具有相同的值 我想保存Origin值并将其还原,但是如果Origin更改temp也会更改。它就像编译器不启动temp 我想这是一个真正的基础发展知识,但我找不到答案。非常抱歉 更新 到目前为止,我尝试了这些方法,但没有一种有效: //save the current origin value Employee temp = Origin; // do some staff with origin and it changes t

温度值随原点值变化。换句话说,temp和origin具有相同的值

我想保存
Origin
值并将其还原,但是如果
Origin
更改
temp
也会更改。它就像编译器不启动
temp

我想这是一个真正的基础发展知识,但我找不到答案。非常抱歉

更新 到目前为止,我尝试了这些方法,但没有一种有效:

//save the current origin value        
Employee temp = Origin;
// do some staff with origin and it changes the origin value.

//restore origin to the temp
Origin = temp;
//here i expected the origin value restore to the temp but it doesn't.

最后,正如亲爱的@erikscandola所说,我将所有属性一个接一个地复制到
temp
对象及其工作状态。但这非常困难(假设
员工是真正的大对象)。有没有更好的办法做这样的事?看起来真的很容易

.Net
中的类是引用类型,当它们发生更改时,它们中的任何一个都会发生更改。 可以使用如下所示的对象温度:

var temp = Origin; 
object tmp = temp; 
Origin = (Employee)tmp;

var temp = new Employee(); 
temp = Origin;
Origin = temp;
当你想使用时,你应该在使用前先施放。
.Net
中的类是引用类型,当更改它们时,它们中的任何一个都会更改。 可以使用如下所示的对象温度:

var temp = Origin; 
object tmp = temp; 
Origin = (Employee)tmp;

var temp = new Employee(); 
temp = Origin;
Origin = temp;
当你想使用时,你应该在使用前先施放。
这是C#的正常行为。将一个对象指定给另一个对象时,将指定相同的实例。因此
temp
Origin
具有相同的指针。要将
Origin
分配给
temp
,您需要在构造函数中执行此操作:

Employee temp = Origin;

Object tmp = temp;
public Employee(Employee e){
    // copy all property values
}
然后调用构造函数:

Employee temp = Origin;

Object tmp = temp;
public Employee(Employee e){
    // copy all property values
}

现在您可以使用
Origin
执行您想要的操作,而无需更改
temp
的值。这是C#的正常行为。将一个对象指定给另一个对象时,将指定相同的实例。因此
temp
Origin
具有相同的指针。要将
Origin
分配给
temp
,您需要在构造函数中执行此操作:

Employee temp = Origin;

Object tmp = temp;
public Employee(Employee e){
    // copy all property values
}
然后调用构造函数:

Employee temp = Origin;

Object tmp = temp;
public Employee(Employee e){
    // copy all property values
}

现在您可以使用
Origin
执行您想要的操作,而无需更改
temp

的值
temp
Origin
都是引用类型,
temp
Origin
都指向堆上相同的内存位置,因此它们具有相同的值。 要避免这种情况,请将新员工创建为:

Employee temp = new Employee(Origin);

这将在堆上创建一个新的内存位置,并因此具有不同的值。

两个
temp
Origin
都是引用类型,
temp
Origin
都指向堆上的相同内存位置,因此它们具有相同的值。 要避免这种情况,请将新员工创建为:

Employee temp = new Employee(Origin);

这将在堆上创建一个新的内存位置,从而具有自己不同的值。

确保您理解它们之间的区别,并且您将理解代码的错误所在。(提示-似乎您正在使用引用类型)Post缺少,因此无法真正回答,但您可能会在中找到解释。@dotnetom非常感谢。我现在明白了。看起来temp和Orgin都有相同的内存。但如何解决我的问题呢?我可以用自己的内存创建临时值吗?请确保您理解它们之间的区别,并且您将理解代码的错误所在。(提示-似乎您正在使用引用类型)Post缺少,因此无法真正回答,但您可能会在中找到解释。@dotnetom非常感谢。我现在明白了。看起来temp和Orgin都有相同的内存。但如何解决我的问题呢?我可以用它自己的内存创建临时值吗?谢谢。你的意思是我做这样的事情:对象温度=原点;那么Origin=Temp?谢谢。但它不起作用。我试过这个:var temp=Origin;对象tmp=温度;原产地=(员工)tmp;非常感谢。你的意思是我做这样的事情:对象温度=原点;那么Origin=Temp?谢谢。但它不起作用。我试过这个:var temp=Origin;对象tmp=温度;原产地=(员工)tmp;谢谢但这有点不可能!!这个雇员有很多财产。而且我没有访问该类的权限。您可以创建一个方法来copu所有属性。初始化新员工
Employee temp=new Employee()
然后调用方法复制所有
CopyEmployeed(临时、原始)谢谢。但这有点不可能!!这个雇员有很多财产。而且我没有访问该类的权限。您可以创建一个方法来copu所有属性。初始化新员工
Employee temp=new Employee()
然后调用方法复制所有
CopyEmployeed(临时、原始)谢谢。但它不起作用。我试过:var temp=new Employee();温度=原点;在这种情况下,您可以使用copy构造,其中必须将emp的所有属性映射到testhank you的属性。但它不起作用。我试过:var temp=new Employee();温度=原点;在这种情况下,您可以使用copy构造,其中必须将emp的所有属性映射为temp的属性