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

C#函数调用后变量值未更新问题咨询

问题原因:C#的值类型值传递机制

这是因为C#中值类型参数默认采用值传递,具体分析如下:

  • 值传递的本质
    调用Plus(a, n)时,传递的是外部变量a和n的副本,而非变量本身。函数内部修改的只是这个副本的值,和外部原始变量没有关联,函数执行完毕后副本会被销毁,原始变量自然不会变化。

  • 结合代码分析
    你定义的int a属于值类型,调用Plus(a, n)时会创建a的副本传入函数。Plus内部对形参a的累加操作,全是在这个副本上进行的,完全不影响外部的原始a变量。

两种常用解决方法

方法一:用ref关键字实现引用传递

让形参指向原始变量的引用,内部修改会直接作用于原始变量:

static void Plus(ref int a, int n)
{
    for(int i = 0; i < n; i++)
    {
        a = a + 1;
    }
}
static void Main(string[] args)
{
    Console.WriteLine("a = "); 
    int a = int.Parse(Console.ReadLine());
    Console.WriteLine("n = ");
    int n = int.Parse(Console.ReadLine());
    Plus(ref a, n); // 调用时必须加ref关键字
    Console.WriteLine($"after plus a = {a}");
}

方法二:让函数返回修改后的值

通过返回值将计算结果传递出来,再赋值给外部变量:

static int Plus(int a, int n)
{
    for(int i = 0; i < n; i++)
    {
        a = a + 1;
    }
    return a;
}
static void Main(string[] args)
{
    Console.WriteLine("a = "); 
    int a = int.Parse(Console.ReadLine());
    Console.WriteLine("n = ");
    int n = int.Parse(Console.ReadLine());
    a = Plus(a, n); // 接收返回值并覆盖原始变量
    Console.WriteLine($"after plus a = {a}");
}

内容的提问来源于stack exchange,提问作者Bách Trần

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 02:40:37