启动后

时间:2016-01-03 08:05:01

标签: c# .net class wcf

//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是真正的大对象)。有没有更好的方法来做这样的事情?这真的很容易。

3 个答案:

答案 0 :(得分:4)

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

var temp = new Employee();

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

答案 1 :(得分:2)

这是C#的正常行为。将对象分配给另一个对象时,您将分配相同的实例。因此tempOrigin具有相同的指针。要将Origin分配给temp,您需要在构造函数中执行此操作:

public Employee(Employee e){
    // copy all property values
}

然后你调用构造函数:

Employee temp = new Employee(Origin);

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

答案 2 :(得分:0)

.Net中的类是参考类型,当它们发生变化时,它们会发生变化。 你可以像这样使用Object Temp:

Employee temp = Origin;

Object tmp = temp;

当你想要使用时,你应该投射使用。 enter image description here