C# 启动后临时变量值发生变化
温度值随原点值变化。换句话说,temp和origin具有相同的值 我想保存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
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的属性