C#开发问题:如何在for循环外部使用IDString数组的全部元素
解决C#中循环内数组初始化导致无法复用元素的问题
我来帮你搞定这个问题!你现在的代码里,IDString数组的初始化位置错了,这导致你没法在循环外拿到所有行的CellDataID值,具体问题和修复方案如下:
问题分析
你当前的代码里,IDString = new string[LastRow];是写在for循环内部的——这意味着每一次循环迭代都会创建一个全新的数组对象,之前循环里赋值的元素都会被丢弃。等循环结束后,IDString里只会保留最后一次循环赋值的那个元素(对应RowCount-1的索引位置),其他位置都是默认的null,自然没法拿到所有数据。
另外,虽然IDString是在方法开头声明的(作用域覆盖整个方法),但错误的初始化逻辑让它完全发挥不了存储所有元素的作用。
修复后的代码
把数组的初始化移到循环外面,确保整个循环都使用同一个数组实例,同时调整索引让存储更合理(可选):
public void button20_Click(object sender, EventArgs e) { string CellDataID; // 1. 把数组初始化移到循环外面,只创建一次 string[] IDString = new string[LastRow - 1]; // 因为RowCount从2到LastRow,共LastRow-1个元素 int arrayIndex = 0; // 用单独的索引变量来维护数组位置,更清晰 for (int RowCount = 2; RowCount <= LastRow; RowCount++) { xlRange = (Excel.Range)xlSht.Cells[RowCount, colNumberID]; CellDataID = (string)xlRange.Text; PrinterBox1.Items.Add(CellDataID); // 2. 直接给数组的对应索引赋值,不再重新创建数组 IDString[arrayIndex] = CellDataID; arrayIndex++; } // 这里就可以正常使用IDString的所有元素了! // 举个例子:遍历输出所有元素 foreach(string id in IDString) { if(!string.IsNullOrEmpty(id)) Console.WriteLine(id); } }
额外说明
如果你不想用额外的arrayIndex变量,也可以用RowCount - 2作为数组索引(因为RowCount从2开始,2-2=0,正好对应数组的第一个位置),这样代码可以改成:
// 初始化数组 string[] IDString = new string[LastRow - 1]; for (int RowCount = 2; RowCount <= LastRow; RowCount++) { // ... 其他代码不变 IDString[RowCount - 2] = CellDataID; }
这样修改后,IDString数组就会正确存储所有从第2行到LastRow的CellDataID值,你可以在循环结束后的任何位置正常使用这个数组的所有元素啦。
内容的提问来源于stack exchange,提问作者Fakd 'Ap
相关产品推荐
相关产品推荐

