IF语句多个条件,相同的声明

时间:2009-08-27 14:32:58

标签: c#

嘿所有,希望减少我的c#if语句中的代码,因为有几个重复因素,并且想知道是否可以使用微调解决方案。

我目前有2个if语句需要执行相同的语句,但是当没有选中复选框时,唯一的变量是if语句的额外条件。我只是想知道是否有办法让它成为一个语句或使条件字符串变量,这是代码的压缩版本:

if (checkbox.checked)
  {
    if (columnname != a && columnname != b && columnname != c)
    {
      "statement 1"
    }
  }
else
  {
    if (columnname != a && columnname != b && columnname != c 
        && columnname != A2)
    {
      "statement 1"
    }
  }

就像我需要在if语句的条件下运行if语句,如果这有意义,就像这个伪表单一样:

if (columnname != a 
    && columnname != b 
    && columnname != c 
    && if(checkbox.checked{columnname != A2})

10 个答案:

答案 0 :(得分:40)

if (columnname != a 
  && columnname != b 
  && columnname != c
  && (checkbox.checked || columnname != A2))
{
   "statement 1"
}

应该做的伎俩。

答案 1 :(得分:11)

if (columnname != a && columnname != b && columnname != c 
        && (columnname != A2 || checkbox.checked))
    {
      "statement 1"
    }

答案 2 :(得分:7)

我总是尝试将复杂的布尔表达式分解为有意义的变量(您可能会根据这些列的用途考虑更好的名称):

bool notColumnsABC = (columnname != a && columnname != b && columnname != c);
bool notColumnA2OrBoxIsChecked = ( columnname != A2 || checkbox.checked );

if (   notColumnsABC 
    && notColumnA2OrBoxIsChecked )
  {
      "statement 1"
  }

答案 3 :(得分:4)

相当古老的问题,但检查一下这是一种检查条件的更集群的方式:

private bool IsColumn(string col, params string[] names) => names.Any(n => n == col);

用法:

private void CheckColumn()
{
     if(!IsColumn(ColName, "Column A", "Column B", "Column C"))
    {
     //not A B C column
    }

}

答案 4 :(得分:3)

这不是一样的:

if ((checkbox.checked || columnname != A2) && 
        columnname != a && columnname != b && columnname != c)
  {
      "statement 1"
  }

答案 5 :(得分:2)

如果您认为更清楚,也可以这样做:

if (columnname != a 
  && columnname != b 
  && columnname != c
{
   if (checkbox.checked || columnname != A2)
   {
      "statement 1"
   }
}

答案 6 :(得分:1)

我认为agileguy有正确答案,但我想补充一点,对于更困难的情况,我采取了一些策略来解决问题。第一种是使用truth table。如果您使用Google“真值表”,您将会遇到一些与编程和计算机科学直接相关的示例。

我采取的另一种策略是使用匿名函数在各种条件之间封装公共逻辑。在if块之前创建它,然后在需要的地方使用它。这似乎创建了更易读和可维护的代码。

答案 7 :(得分:0)

if (checkbox.checked && columnname != a && columnname != b && columnname != c)
    {
      "statement 1"
    }
else if (columnname != a && columnname != b && columnname != c 
        && columnname != A2)
    {
      "statement 1"
    }

是一种简化方法。

答案 8 :(得分:0)

var test = new char[] {a, b, c}.Contains(columnname));

if(test)
{
  "true statement"
}
else
{
   "false statement"
}

答案 9 :(得分:0)

这样的事情怎么样?

    var condCheck1 = new string[]{"a","b","c"};
    var condCheck2 = new string[]{"a","b","c","A2"}

    if(!condCheck1.Contains(columnName) && !checkbox.checked)
        //statement 1
    else if (!condCheck2.Contains(columnName))
        //statment 2