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

如何动态扩容并填充string[]类型数组?代码问题求解

嘿,我来帮你搞定这个数组扩容填充的问题~首先得先说说你现有代码里的两个明显问题:

  • 你初始化的是空数组string[] Dynamic = new string[] {};,长度为0,这时候调用SetValue会直接抛出索引越界异常,因为数组根本没有多余位置存新元素。
  • 循环里的i++写了两次(for循环条件里的一次,SetValue参数里的一次),会导致每次循环i跳着增加,不仅会跳过一半的元素,还很容易超出BigResult的长度范围。

下面给你几种实用的解决方案,按推荐程度排序:

方案1:直接初始化对应长度的数组(最简单高效)

既然你能通过BigResult.Count()拿到元素数量,那直接创建对应长度的数组就好,完全不需要手动扩容:

// 先把长度存下来,避免多次调用Count()(如果BigResult是IEnumerable类型,多次调用可能重复枚举元素)
int itemCount = BigResult.Count();
string[] Dynamic = new string[itemCount];
for (int i = 0; i < itemCount; i++)
{
    Dynamic[i] = BigResult[i];
}

⚠️ 注意:如果BigResult是IEnumerable<string>而不是IList<string>,BigResult[i]这种索引访问会报错,这时候可以先转成List,或者用foreach遍历赋值。

方案2:用List动态扩容(灵活省心)

如果BigResult的长度是动态变化的,或者你需要中途添加/删除元素,用List<string>会比原生数组方便太多,最后再转成数组就行:

List<string> dynamicList = new List<string>();
foreach (var resultItem in BigResult)
{
    dynamicList.Add(resultItem);
}
// 把List转成string数组
string[] Dynamic = dynamicList.ToArray();

要是你用了LINQ,还能一步到位:

string[] Dynamic = BigResult.ToArray();

(前提是BigResult实现了IEnumerable<string>,大部分集合类型都支持)

方案3:手动用Array.Resize扩容(适合特殊场景)

如果一定要坚持用原生数组且需要动态扩容(比如不知道最终元素数量),可以用Array.Resize方法,但要注意频繁扩容会有性能开销:

string[] Dynamic = new string[0];
int currentIndex = 0;
foreach (var resultItem in BigResult)
{
    // 每次扩容1个位置,要是元素多的话,建议按倍数扩容(比如每次长度翻倍)来提升性能
    Array.Resize(ref Dynamic, currentIndex + 1);
    Dynamic[currentIndex] = resultItem;
    currentIndex++;
}

总结一下:优先用方案1或方案2,代码简洁还高效;方案3只适合必须用原生数组且动态添加的特殊场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:18:30