日期:2014-05-18  浏览次数:20484 次

将一个参数传到方法里,方法里修改这个参数的值时,外部这个参数的值,也发生了变化,怎么解决?
我将一个参数传到方法里,方法里修改这个参数的值时,外部这个参数的值,也发生了变化,怎么解决? 


方法参数上的 ref 方法参数关键字使方法引用传递到方法的同一个变量。当控制传递回调用方法时,在方法中对参数所做的任何更改
都将反映在该变量中。  
有没有与ref相反的?

------解决方案--------------------
即然用ref 肯定就是这个作用,要不直接传值就可以了.
------解决方案--------------------
不用这个关键字就好了!
------解决方案--------------------
定义的时候不要把变量定义为全局的就行了吧
------解决方案--------------------
我甚至在方法里重新new一个实体,把参数实体赋值给它,也没有用
=========这与没用,只要你写A=B,好么A就指向B了。
你可以在传值前克隆个对象传进去,顺便问一句为什么要改变他呢?有没有其他变通的办法?

------解决方案--------------------
先深层克隆(deep clone)你的Object,再改克隆ojbect的内容:

public MyObject AlterObject(MyObject myObject)
{
//深层克隆 
MyObject modifiedObject = new MyObject();

modifiedObject.AttributeA = myObject.AttributeA;
modifiedObject.AttributeB = myObject.AttributeB;
modifiedObject.AttributeC = myObject.AttributeC;
......
 
//修改克隆对象的值
if (modifiedObject........)
....
....
 
return modifiedObject;
}
这样你原来的object就不会改变了。

深层克隆一般有三种方法,上面是一种。

第二种方法,用反射(Reflection),通过枚举一个对象的所有属性来复制。

第三种方法是Serilize object, 然后用Memory Stream进行内存复制。但是这个ojbect必须serilizable,而且不能过大。