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

C#二维数组特定行列获取与比较问题求助

问题分析与解决方案

首先,你的代码始终进入else分支的核心原因是搞反了C#二维数组的索引顺序!在C#中,string[,]类型的二维数组索引规则是[行索引, 列索引],而你写的table2[col, row]把列索引放在了前面、行索引放在后面,导致你取到的完全不是你想要的位置的值,自然无法触发预期的条件判断。

关键错误点

你想要获取**第3列(索引2)第1行(索引0)**的值,正确写法是table2[0, 2],而不是table2[2, 0]——后者实际取的是第3行第1列的值,和你的需求完全偏离。这就导致你的origin和other变量拿到的要么是默认的null,要么是错误位置的值,所以条件永远不成立,只能进入else分支。

修正后的基础比较逻辑

针对你的测试数据PP,B,P,P,B(假设对应第0行的列0=PP、列1=B、列2=P、列3=P、列4=B),先写出正确的取值与比较代码:

// 定义目标位置:第3列(索引2)第1行(索引0)
int targetRow = 0;
int startCol = 2;

// 获取目标值:第3列第1行
string origin = table2[targetRow, startCol];
// 优先取同列下一行(第3列第2行),如果为null则取右侧列的同一行(第4列第1行)
string compareValue = table2[targetRow + 1, startCol] ?? table2[targetRow, startCol + 1];

// 用更安全的方式判断空值与相等性
if (!string.IsNullOrEmpty(origin) && origin.Equals(compareValue))
{
    Debug.Log("第3列第2行有值,且与第3列第1行相等");
}
else
{
    Debug.Log("第3列第2行无值,已切换到第4列第1行进行比较");
}

适配完整需求(依次往后列递推比较)

如果你的需求是:从第3列开始,先比较当前列的下一行;若下一行无值,则和右侧列的同一行比较;若右侧列也无值,继续往右递推直到找到有值的位置或遍历完所有列,可通过循环实现完整逻辑:

string[,] table2 = new string[104, 6];
// 先给测试数据赋值(匹配你的PP,B,P,P,B)
table2[0, 0] = "PP";
table2[0, 1] = "B";
table2[0, 2] = "P";
table2[0, 3] = "P";
table2[0, 4] = "B";
// 若要测试第3列第2行有值的场景,可打开下面的注释
// table2[1, 2] = "P";

int targetRow = 0;
int currentCol = 2; // 从第3列开始
string origin = table2[targetRow, currentCol];
string compareValue = null;
bool foundValidValue = false;

// 第一步:检查同列下一行
if (!string.IsNullOrEmpty(table2[targetRow + 1, currentCol]))
{
    compareValue = table2[targetRow + 1, currentCol];
    foundValidValue = true;
    Debug.Log($"使用第{currentCol + 1}列第{targetRow + 2}行的值进行比较");
}
else
{
    // 同列下一行无值,往右遍历列找同一行的有效数据
    while (currentCol < table2.GetLength(1) - 1)
    {
        currentCol++;
        if (!string.IsNullOrEmpty(table2[targetRow, currentCol]))
        {
            compareValue = table2[targetRow, currentCol];
            foundValidValue = true;
            Debug.Log($"第{currentCol}列下一行无值,切换到第{currentCol + 1}列第{targetRow + 1}行的值进行比较");
            break;
        }
    }
}

// 最终判断逻辑
if (foundValidValue && !string.IsNullOrEmpty(origin) && origin.Equals(compareValue))
{
    Debug.Log("找到匹配的值");
}
else if (!foundValidValue)
{
    Debug.Log("后续列和行都没有可比较的有效数据");
}
else
{
    Debug.Log("值不匹配");
}

额外优化建议

  • 避免直接用==比较字符串,优先使用string.Equals(),既能避免null引用异常,还能指定比较规则(比如忽略大小写)。
  • 用string.IsNullOrEmpty()或string.IsNullOrWhiteSpace()判断空值,比直接判断== null更全面,能覆盖空字符串的场景。
  • 建议把比较逻辑抽成单独的方法,和原代码中的foreach循环解耦,提升代码的可读性和复用性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:15:18