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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 16:48:28