C# 在同一函数中使用新名称引用变量

C# 在同一函数中使用新名称引用变量,c#,reference,C#,Reference,是否可以使用不同的名称引用现有变量来标识它。我想这样做的原因是为了清理我的代码 实例 目前,我必须做一些类似下面的例子 private void Main() { MyComplexObjectClass myComplicatedObject = new MyComplexObjectClass(); myComplicatedObject.subobj.subobj2.subobj3 = "test start"; TestFunction(ref myCompli

是否可以使用不同的名称引用现有变量来标识它。我想这样做的原因是为了清理我的代码

实例 目前,我必须做一些类似下面的例子

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
没有将子对象3设置为“test 3”,而是“test start”(起始值)。我确信这是因为我正在创建的对象是一个新对象,而不是引用现有对象的对象。我怎样才能让它工作

private void TestFunction(ref myComplicatedObject)
{
    MySubObjectClass subobj3 = myComplicatedObject.subobj.subobj2.subobj3;
    subobj3 = "test 1";
    subobj3 = "test 2";
    subobj3 = "test 3";
}

是的,如果指定给temp变量的对象是引用类型(类的实例,而不是结构或原语),则可以执行此操作

关键是,为了使其工作,您仍然必须为新变量指定属性,因此您“中断”以存储在变量中的部分需要来自更高的级别(
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

您是否打算使用
.subobject3
MySubObjectClass subobject3=mycomplicateobject.subobject.subobject2?好像是你干的。哎呀!好眼力。谢谢我只是喜欢那些对问题投否决票的人,他们对为什么这是一个“糟糕”的问题毫无评论。你应该感到羞耻……是的,需要像我一样添加一个
ref
关键字。我需要
myComplementObject.SubObject.SubObject.SubObject 2.SubObject 3
=“测试3”,如果我删除
ref
关键字,结果将是“测试开始”,而不是我想要的“测试3”。有趣的。。。我会尝试一下,然后再报告。谢谢@ArvoBowen我99%确定您不需要
ref
那里,除非
myComplexObject类
实际上不是
类,而是
结构。工作示例:您可能是对的,可能。。。当我希望更改传入对象的值时,我总是使用该关键字。我“认为”在用户定义的对象上,比如我的复杂类,可能不需要它。如果您要传递一个int或字符串,我想您需要使用
ref
关键字来查看更改。早在那时,我就为旧语言做过这种练习,从那时起我就一直在做同样的练习。无论哪种方式,我的方式仍然有效。呵呵,谢谢你指出这一点!就答案而言,你在钱上是对的!就像你说的那样,我需要做的就是远离最后一条腿,使用更高的关卡。这并不完全是我希望实现的,但它确实让事情看起来更干净了再次感谢!