C#:如何从另一个方法访问并修改变量后返回原方法?
解决C#中方法间修改变量并回传的问题
嘿,这个问题其实挺常见的,你之前想通过循环调用方法的思路确实走偏啦,完全没必要搞无限循环那一套。C#里有几种非常直接的方式能实现你要的需求——在methodTwo里修改变量后,把更新后的值传回methodOne,我给你详细讲讲:
方法1:使用返回值(最直观的方式)
直接把methodTwo改成有返回值的方法,修改完变量后返回它就行,methodOne只需要接收这个返回值。示例代码如下:
public void methodOne(string variable1) { variable1 = "testing"; myClass p = new myClass(); // 接收methodTwo返回的修改后的值 variable1 = p.methodTwo(variable1); // 这里就能拿到修改后的值了 Console.WriteLine("修改后的值:" + variable1); } // 把methodTwo改成返回string类型的方法 public string methodTwo(string variable1) { // 修改变量值 variable1 = "modified " + variable1; Console.Write("methodTwo中的值:" + variable1); // 返回修改后的值 return variable1; }
方法2:使用引用参数(ref关键字)
如果你不想修改methodTwo的返回值类型(比如它本来就需要返回其他东西),可以用ref关键字实现引用传递,这样methodTwo里对变量的修改会直接作用于methodOne里的原变量:
public void methodOne(string variable1) { variable1 = "testing"; myClass p = new myClass(); // 调用时加上ref关键字 p.methodTwo(ref variable1); Console.WriteLine("修改后的值:" + variable1); } // 参数前加上ref关键字 public void methodTwo(ref string variable1) { // 直接修改,会同步到methodOne的原变量 variable1 = "modified " + variable1; Console.Write("methodTwo中的值:" + variable1); }
方法3:使用输出参数(out关键字)
和ref类似,但out要求方法必须给参数赋值,适合那种方法的核心目的就是输出这个修改后的值的场景,而且调用前不需要给变量初始化:
public void methodOne() { string variable1; myClass p = new myClass(); // 调用时加上out关键字 p.methodTwo(out variable1); Console.WriteLine("methodTwo返回的值:" + variable1); } // 参数前加上out关键字 public void methodTwo(out string variable1) { // 必须给variable1赋值 variable1 = "modified value from methodTwo"; Console.Write("methodTwo中的值:" + variable1); }
为什么你的原思路会出问题?
你之前想在methodTwo里调用methodOne,会导致每次调用methodOne都会新建myClass实例,然后调用methodTwo,methodTwo又调用methodOne,形成无限循环,完全是没必要的绕路。上面这三种方法都能直接实现变量修改后的回传,选哪种取决于你的实际需求~
内容的提问来源于stack exchange,提问作者Jason Rowls
相关产品推荐
相关产品推荐

