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

mar*_*igi 15 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"
    }
  }
Run Code Online (Sandbox Code Playgroud)

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

if (columnname != a 
    && columnname != b 
    && columnname != c 
    && if(checkbox.checked{columnname != A2})
Run Code Online (Sandbox Code Playgroud)

Dan*_*ott 42

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

应该做的伎俩.

  • 通常当我在if语句中的条件超过三时,我将它们提取到一个私有方法只是为了清楚说明条件是什么 (3认同)

mik*_*rey 11

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


mar*_*h44 7

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

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

if (   notColumnsABC 
    && notColumnA2OrBoxIsChecked )
  {
      "statement 1"
  }
Run Code Online (Sandbox Code Playgroud)


Stu*_*urm 5

很老的问题,但请检查这个以获取更多集群检查条件的方法:

private bool IsColumn(string col, params string[] names) => names.Any(n => n == col);
Run Code Online (Sandbox Code Playgroud)

用法:

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

}
Run Code Online (Sandbox Code Playgroud)