如何动态扩容并填充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
相关产品推荐
相关产品推荐

