C# foreach遍历二维数组工作原理及仅遍历指定行问题求解
C#二维数组foreach遍历机制及仅输出品牌行实现方案
foreach遍历二维数组的核心机制
你声明的string[,]是C#多秩二维数组,foreach对这类数组的遍历逻辑是按内存存储顺序逐一枚举所有元素,不会自动区分行列:
- 遍历顺序从低维到高维递进:先扫完第0行所有列,再扫第1行所有列,直到所有元素遍历完成
- 你初始化的是10*10规格的数组,仅给前2行前4列赋了值,剩余位置默认值为
null,原写法不仅会输出价格数据,还会打印大量空行。
仅输出品牌行的实现方式
你的品牌数据全部存在二维数组的第0行,不需要全量遍历整个数组,两种常用实现如下:
写法1:for循环固定行号遍历(入门阶段最直观)
直接锁定第0行维度,逐列读取内容,跳过未赋值的空位置即可:
public void carsBrands() { carsBrand[0, 0] = "Ford"; carsBrand[0, 1] = "Chevrolet"; carsBrand[0, 2] = "Dodge"; carsBrand[0, 3] = "Fiat"; carsBrand[1, 0] = "120,000$"; carsBrand[1, 1] = "100,000$"; carsBrand[1, 2] = "140,000$"; carsBrand[1, 3] = "50,000$"; // 固定遍历第0行(品牌存储行) for (int col = 0; col < carsBrand.GetLength(1); col++) { string currentBrand = carsBrand[0, col]; // 跳过未赋值的空元素 if (!string.IsNullOrEmpty(currentBrand)) { Console.WriteLine(currentBrand); } } }
写法2:优化数据结构(长期维护推荐)
品牌和价格是一一对应的关联数据,用二维字符串数组硬存很容易出现遍历错行的问题,更合理的方式是用一维数组存储成对的品牌-价格数据,后续取数逻辑会简单很多:
// 直接用值元组存储关联的品牌、价格数据,不需要单独开二维数组 (string Brand, string Price)[] cars = new (string, string)[] { ("Ford", "120,000$"), ("Chevrolet", "100,000$"), ("Dodge", "140,000$"), ("Fiat", "50,000$") }; // 输出品牌直接遍历即可,不会混进价格数据 foreach (var car in cars) { Console.WriteLine(car.Brand); }
注:原代码把数组长度定义为常量10,但实际只存了4条数据,遍历的时候如果不做非空判断,会输出6个无内容的空行,这点要注意。
内容的提问来源于stack exchange,提问作者David Gor
相关产品推荐
相关产品推荐

