在同一函数中具有新名称的引用变量

时间:2017-11-16 03:27:26

标签: c# reference

是否可以使用其他名称引用现有变量来识别它。我想这样做的原因是清理我的代码......

实施例

目前我必须做类似以下示例的事情......

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";
}

1 个答案:

答案 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