//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.
临时值随原点值而变化。换句话说,temp和origin都有相同的值!!!
我想保存Origin
值并将其恢复,但如果origin
更改了temp
更改。它就像编译器没有启动temp
。
我认为这是一个真正的基础知识,但我无法找到答案。很抱歉。
更新 到目前为止,我尝试了这些,但没有工作:
var temp = Origin;
object tmp = temp;
Origin = (Employee)tmp;
var temp = new Employee();
temp = Origin;
Origin = temp;
最后亲爱的@erikscandola说我将所有属性逐个复制到temp
对象中并且它有效。但这很难(假设Employee
是真正的大对象)。有没有更好的方法来做这样的事情?这真的很容易。
答案 0 :(得分:4)
temp
和Origin
都是引用类型,temp
和Origin
指向堆上的相同内存位置,因此它们具有相同的值。
为避免这种情况,请创建新的Employee
:
var temp = new Employee();
这将在堆上创建一个新的内存位置,因此具有自己不同的值。
答案 1 :(得分:2)
这是C#的正常行为。将对象分配给另一个对象时,您将分配相同的实例。因此temp
和Origin
具有相同的指针。要将Origin
分配给temp
,您需要在构造函数中执行此操作:
public Employee(Employee e){
// copy all property values
}
然后你调用构造函数:
Employee temp = new Employee(Origin);
现在,您可以使用Origin
执行所需操作,而无需更改temp
的值。
答案 2 :(得分:0)