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

C#初学者疑问:为何这段代码输出1而非10?

问题原因解析

这是因为C#里值类型参数默认是按值传递的,int属于值类型,当你把Main方法里的a传给FuncTrain方法时,实际上传递的是a的一个副本,而非变量本身。

具体细节:

  • 在Main中,int a = 1创建了一个值为1的变量。
  • 调用FuncTrain(a)时,程序会把a的值复制一份,传给方法内部的参数a——这个方法内的a和Main里的a是完全独立的两个变量,只是名字相同而已。
  • 在FuncTrain里修改的是这个副本的值(改成10),但Main里的原始变量根本没被改动。
  • 最后Console.WriteLine输出的自然还是Main里原始变量的初始值1。

如果想让Main里的a被修改,有两种常用方法:

  1. 使用ref关键字,将参数改为按引用传递:
using System;
public class HelloWorld
{
  public static void Main(string[] args)
  {
      int a = 1;
      FuncTrain(ref a); // 调用时添加ref关键字
      Console.WriteLine("a = " + a);
  }

  static int FuncTrain(ref int a) // 参数前添加ref关键字
  {
      a = 10;
      return a;
  }
}
  1. 接收方法的返回值,赋值给原始变量:
using System;
public class HelloWorld
{
  public static void Main(string[] args)
  {
      int a = 1;
      a = FuncTrain(a); // 将方法返回值重新赋值给a
      Console.WriteLine("a = " + a);
  }

  static int FuncTrain(int a)
  {
      a = 10;
      return a;
  }
}

内容的提问来源于stack exchange,提问作者kukoldin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 23:17:33