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

C#二维数组转字符串时未正确添加换行符问题求助

问题分析与修复方案

先看你提供的测试代码:

public string myMethod(int[,] anArray) { 
    string aString = ""; 
    for (int i = 0; i < anArray.GetLength(0); i++) { 
        for (int j = 0; j < anArray.GetLength(1); j++) { 
            if (j == anArray.Length - 1) { 
                aString += " " + anArray[i, j] + "\r\n"; 
                continue; 
            } 
            aString += anArray[i, j] + "|"; 
        } 
    } 
    return aString; 
}

你期望得到每行以换行结尾的格式化字符串:

0|0|0
0|0|0
0|0|0

但实际得到的却是所有元素用|连接的长字符串:

0|0|0|0|0|0|0|0|0| 

正如你自己补充的,问题确实出在if条件的判断上——你用了anArray.Length来判断,但这个属性返回的是二维数组的总元素个数,而不是当前行的最后一列索引。

举个例子,如果是3x3的数组,anArray.Length是9,anArray.Length-1就是8,但内层循环的j最大只能到2(因为GetLength(1)是3,索引从0开始),所以这个if条件永远不会触发,所有元素都被加上了|,自然得不到预期的换行效果。

修复后的代码

把判断条件改成j == anArray.GetLength(1) - 1,GetLength(1)会返回数组的列数,减一就是当前行最后一列的索引:

public string myMethod(int[,] anArray) { 
    string aString = ""; 
    for (int i = 0; i < anArray.GetLength(0); i++) { 
        for (int j = 0; j < anArray.GetLength(1); j++) { 
            // 判断当前列是否是该行的最后一列
            if (j == anArray.GetLength(1) - 1) { 
                aString += anArray[i, j] + "\r\n"; 
                continue; 
            } 
            aString += anArray[i, j] + "|"; 
        } 
    } 
    return aString; 
}

额外优化建议

另外提一句,在循环里用string直接拼接字符串效率不高,尤其是当数组规模较大时,推荐使用StringBuilder来提升性能:

using System.Text;

public string myMethod(int[,] anArray) { 
    StringBuilder sb = new StringBuilder();
    int rowCount = anArray.GetLength(0);
    int colCount = anArray.GetLength(1);
    
    for (int i = 0; i < rowCount; i++) { 
        for (int j = 0; j < colCount; j++) { 
            sb.Append(anArray[i, j]);
            if (j == colCount - 1) { 
                sb.AppendLine(); // 等价于添加"\r\n",写法更简洁
            } else {
                sb.Append('|');
            }
        } 
    } 
    return sb.ToString(); 
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:34:04