如何将变量传入函数并返回修改后的值?C#参数传递疑问
问题分析与解决方案
先看你这段代码的核心问题:
- 方法里的
inputInput++是后置自增运算符,逻辑是先把inputInput当前的值赋值给intputOutput,再把inputInput自身加1。但inputInput是值类型参数,方法里的修改只在内部副本上生效,不会影响外部变量。 - 调用时
IncrementTest(inputOutput, out inputOutput),虽然用了out参数,但方法里给它赋的是inputInput的初始值(也就是外部传进来的1),所以最后输出还是1。另外代码里还有拼写错误:intputOutput应该是inputOutput,容易造成混淆。
正确实现方式
根据你想要实现「让外部变量完成自增」的需求,有几种常用的正确写法:
方式1:用ref参数
如果需要既传入变量的值,又直接修改原变量,用ref更贴合场景:
int inputOutput = 1; Console.WriteLine(inputOutput); //Prints 1 static void IncrementTest(ref int num) { num++; // 直接修改原变量的值 } IncrementTest(ref inputOutput); Console.WriteLine(inputOutput); //Prints 2
方式2:直接返回结果
这是最直观的写法,不需要额外参数:
int inputOutput = 1; Console.WriteLine(inputOutput); //Prints 1 static int IncrementTest(int num) { return num + 1; // 返回自增后的值 } inputOutput = IncrementTest(inputOutput); Console.WriteLine(inputOutput); //Prints 2
方式3:正确使用out参数(如果一定要用out)
out参数的设计初衷是用来输出值,一般不依赖输入的初始值。如果要用out实现自增逻辑,应该直接计算后赋值:
int inputOutput = 1; Console.WriteLine(inputOutput); //Prints 1 static void IncrementTest(int input, out int output) { output = input + 1; // 计算自增后的值赋值给out参数 } IncrementTest(inputOutput, out inputOutput); Console.WriteLine(inputOutput); //Prints 2
内容的提问来源于stack exchange,提问作者cry_wifi
相关产品推荐
相关产品推荐

