交换两个整数后值未改变,代码问题排查求助
问题原因及解决办法
你的代码问题出在C#值类型的默认传递方式上:
int是值类型,调用SwapTwoIntegers(a, b)时,程序会把外部变量a和b的数值复制一份,传给函数内部的参数a和b。函数里交换的只是这两个副本,完全碰不到外面的原变量。所以函数执行完,原变量的值自然没变化。
下面给几种可行的修复方案:
方案1:用ref关键字实现引用传递
把函数参数改成引用传递,这样函数操作的就是原变量本身:
int a = 1; int b = 7; void SwapTwoIntegers(ref int a, ref int b) { int temp = a; a = b; b = temp; } SwapTwoIntegers(ref a, ref b); Console.WriteLine(a); // 输出7
注意调用函数时也要加上ref关键字,明确告诉编译器传递的是变量引用。
方案2:返回元组重新赋值(C# 7.0+支持)
不需要修改参数传递方式,直接返回交换后的两个值,再重新赋值给原变量:
int a = 1; int b = 7; (int, int) SwapTwoIntegers(int a, int b) { return (b, a); } (a, b) = SwapTwoIntegers(a, b); Console.WriteLine(a); // 输出7
这种方式更简洁,也避免了引用传递可能带来的副作用。
方案3:用out关键字传递输出参数
out和ref类似,但要求函数必须给out参数赋值,调用时不需要变量提前初始化:
int a = 1; int b = 7; void SwapTwoIntegers(int inputA, int inputB, out int outputA, out int outputB) { outputA = inputB; outputB = inputA; } SwapTwoIntegers(a, b, out a, out b); Console.WriteLine(a); // 输出7
内容的提问来源于stack exchange,提问作者iamthenotoriousrh
相关产品推荐
相关产品推荐

