函数中调整C#数组大小后返回仍为原尺寸的问题求助
问题解决:数组Resize后主文件长度未更新
问题原因
C#里数组是引用类型,但默认传参是按值传递引用——你传给namesSetup的是原数组引用的副本。Array.Resize(ref Names, 65)会创建一个新的长度为65的数组,并把函数内的Names参数(那个引用副本)指向新数组,但这不会改变主文件里原Names变量的引用。再加你没接收函数返回的新数组,所以主文件里的数组还是原来的空数组。
另外你代码里的Array.Clear(Names, 0, Names.Length)完全没用,因为原数组长度是0,根本没元素可清;而且Array.Resize生成的新数组本身元素就是默认的null,不需要额外清空。
解决方案一:接收函数返回值
直接把函数返回的新数组赋值给主文件的Names变量:
// 主文件代码修改 string[] Names = new string[0]; // 接收返回的新数组,覆盖原变量引用 Names = selectCode.namesSetup(Names);
函数代码可以保留原样(建议删掉没用的Array.Clear):
public string[] namesSetup(string[] Names) { Array.Resize(ref Names, 65); return Names; }
解决方案二:用ref关键字传递参数
给函数参数加上ref,让函数直接修改原变量的引用,不需要返回值:
// 函数代码修改 public void namesSetup(ref string[] Names) { Array.Resize(ref Names, 65); }
主文件调用时也要加上ref:
// 主文件代码修改 string[] Names = new string[0]; selectCode.namesSetup(ref Names);
内容的提问来源于stack exchange,提问作者LiamTrader
相关产品推荐
相关产品推荐

