将一个参数传到方法里,方法里修改这个参数的值时,外部这个参数的值,也发生了变化,怎么解决?
我将一个参数传到方法里,方法里修改这个参数的值时,外部这个参数的值,也发生了变化,怎么解决?
方法参数上的 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,而且不能过大。