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

C#中使用函数向数组添加元素后数组未更新的问题求助

问题原因分析

你的问题出在数组的引用传递和方法调用的处理上:

  1. C#中数组是引用类型,但默认参数传递是按值传递引用——也就是方法里的myArr是外部mangaArray引用的副本。
  2. 你在AddToArray里用Array.Resize(ref myArr, ...),这里的ref只作用于方法内部的myArr变量,会让它指向新创建的扩容后的数组,但外部的mangaArray还是原来的引用,没被更新。
  3. 虽然方法返回了新数组,但你在调用时没有接收这个返回值,所以外部数组自然不会变化。
解决方案

有两种简单的修复方式:

方式一:接收方法返回的新数组

修改Main方法的调用代码,把返回的新数组赋值给原来的变量:

static void Main(string[] args)
{
   string[] mangaArray = {"Ai Yori Aoshi", "Monster Musume", "Interviews with Monster Girls"};
   // 接收返回的新数组,覆盖原变量
   mangaArray = (string[])AddToArray(mangaArray, "Corpse Party");
   PrintArray(mangaArray);      
}

注意这里需要把返回的Array类型强制转换为string[],因为你的方法返回的是Array基类。

方式二:给方法参数添加ref修饰符

让方法直接修改外部的数组引用,不需要返回值:

// 修改方法参数为ref string[],返回值改为void
static void AddToArray(ref string[] myArr, string added)
{
    Array.Resize(ref myArr, myArr.Length + 1);
    myArr[myArr.Length - 1] = added;
}

// 调用时也要加ref关键字
static void Main(string[] args)
{
   string[] mangaArray = {"Ai Yori Aoshi", "Monster Musume", "Interviews with Monster Girls"};
   AddToArray(ref mangaArray, "Corpse Party");
   PrintArray(mangaArray);      
}

这种方式下,Array.Resize的ref和方法参数的ref配合,直接修改了外部变量的引用,不需要接收返回值。

额外建议

如果是练习阶段之后的实际开发,更推荐使用List<string>来代替数组,因为它本身就支持动态添加元素,不需要手动处理扩容:

static void Main(string[] args)
{
   List<string> mangaList = new List<string>{"Ai Yori Aoshi", "Monster Musume", "Interviews with Monster Girls"};
   mangaList.Add("Corpse Party");
   // 遍历打印List
   for (int i = 0; i < mangaList.Count; i++)
   {
       Console.WriteLine($"[{i}] {mangaList[i]}");
   }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 00:10:40