是否可以使用其他名称引用现有变量来识别它。我想这样做的原因是清理我的代码......
目前我必须做类似以下示例的事情......
private void Main()
{
MyComplexObjectClass myComplicatedObject = new MyComplexObjectClass();
myComplicatedObject.subobj.subobj2.subobj3 = "test start";
TestFunction(ref myComplicatedObject);
}
private void TestFunction(ref myComplicatedObject)
{
myComplicatedObject.subobj.subobj2.subobj3 = "test 1";
//tons more code
myComplicatedObject.subobj.subobj2.subobj3 = "test 2";
//tons more code
myComplicatedObject.subobj.subobj2.subobj3 = "test 3";
}
我宁愿让它更干净,就像下面的例子一样。问题是当我这样做然后退出函数时,引用的myComplicatedObject
没有将subobj3设置为“test 3”而是“test start”而不是(起始值)。我确定这是因为我创建的对象subobj3
是一个新对象,而不是引用现有对象的对象。我怎样才能使它发挥作用?
private void TestFunction(ref myComplicatedObject)
{
MySubObjectClass subobj3 = myComplicatedObject.subobj.subobj2.subobj3;
subobj3 = "test 1";
subobj3 = "test 2";
subobj3 = "test 3";
}
答案 0 :(得分:1)
是的,如果您为temp变量分配的内容是引用类型(class
的实例,而不是struct
或原语),则可以执行此操作。
关键是,为了使它能够工作,你仍然必须在新变量上分配属性,这样你就可以中断"断开"存储在变量中需要来自更高的一级(subobj2
)。
如果您直接指定新变量(就像您在问题的第二个代码段中所做的那样),您只需覆盖方法中的变量,而不是其他地方。
试试这个:
private void TestFunction(ref myComplicatedObject)
{
MySubObjectClass subobj2 = myComplicatedObject.subobj.subobj2;
subobj2.subobj3 = "test 1";
subobj2.subobj3 = "test 2";
subobj2.subobj3 = "test 3";
}
仅供参考,此处myComplicatedObject
不需要ref
参数。您应该删除ref
。