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
关键字来查看更改。早在那时,我就为旧语言做过这种练习,从那时起我就一直在做同样的练习。无论哪种方式,我的方式仍然有效。呵呵,谢谢你指出这一点!就答案而言,你在钱上是对的!就像你说的那样,我需要做的就是远离最后一条腿,使用更高的关卡。这并不完全是我希望实现的,但它确实让事情看起来更干净了再次感谢!