You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

交换两个整数后值未改变,代码问题排查求助

问题原因及解决办法

你的代码问题出在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 14:37:54