【问题标题】:only if all conditions are met只有满足所有条件
【发布时间】:2014-07-26 04:23:08
【问题描述】:

我有这段代码,它采用二维数组并将它们转换为要作为文件写入的字符串,它检查 4 个组合框以尝试不写入具有所有 4 个组合框值的行。发生的事情是它没有用任何组合框值写入任何行。请帮忙,谢谢

if (grid[i][3] != comboBox4.Text && grid[i][0] != comboBox1.Text && grid[i][1] != comboBox2.Text
            && grid[i][2] != comboBox3.Text)
            {
                string gridstring = String.Join(",", grid[i]);
                MessageBox.Show(gridstring);
                tw.WriteLine(gridstring);
            }

一些示例伪代码

line1 = a,b,c,d
line1 = b,c,d,e
line1 = e,f,g,h
line1 = h,I,j,k

如果 line 不包含 a,b,c,d 则写入,这样只有第 1 行不会被写入,但目前它会跳过前 2 行

【问题讨论】:

  • 你试过调试吗?
  • 您是否尝试过使用调试器进行调试并逐步查看变量中的值?特别是grid。如果 MessageBox 没有弹出,您似乎根本就没有到达,这意味着 if 语句的评估结果为 false。
  • 期望的行为是什么?你能举个例子吗?
  • 如果在Visual Studio中点击左侧的“死区”,会出现一个红色圆圈。该圆圈称为断点。当您运行程序时,流程将在断点处停止。然后,您可以将鼠标悬停在任何变量(甚至条件本身)上,看看为什么它的评估结果为假(如果是的话)。
  • 感谢您的反馈,但我仍然不明白。显示每个组合框和每个网格行中的内容,并给出预期的输出。

标签: c# if-statement


【解决方案1】:

最好检查可能的匹配项,然后跳过该行,然后只包含规则例外的那些。这使代码更易于阅读。

if (grid[i][0] == comboBox1.Text 
 && grid[i][1] == comboBox2.Text
 && grid[i][2] == comboBox3.Text
 && grid[i][3] == comboBox4.Text)
        {
            continue;
        }
else
{
    string gridstring = String.Join(",", grid[i]);
    MessageBox.Show(gridstring);
    tw.WriteLine(gridstring);
}

如果没有看到 gridcomboBox# 变量中的内容,很难说还有什么可以打破这一点。

【讨论】:

    猜你喜欢
    • 2020-10-04
    • 1970-01-01
    • 1970-01-01
    • 2018-10-31
    • 2016-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-29
    相关资源
    最近更新 更多