IF Утверждение нескольких условий, одно и то же утверждение

Эй, все, чтобы уменьшить код в моих операторах С# 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, если это имеет смысл, например, эта форма psuedo:

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

Ответ 1

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

Должен сделать трюк.

Ответ 2

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

Ответ 3

Я всегда стараюсь разложить сложные логические выражения на значимые переменные (вы, вероятно, могли бы подумать о лучших именах, основанных на том, для чего используются эти столбцы):

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

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

Ответ 4

Разве это не то же самое:

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

Ответ 5

Довольно старый вопрос, но проверьте это для более кластерного способа проверки условий:

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
    }

}

Ответ 6

Вы также можете сделать это, если считаете это более понятным:

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

Ответ 7

Я думаю, что у agileguy есть правильный ответ, но я хотел бы добавить, что для более сложных ситуаций есть несколько стратегий, которые я принимаю для решения проблемы. Во-первых, используйте таблицу истинности . Если вы Google "таблица истинности" , вы столкнетесь с некоторыми примерами, непосредственно связанными с программированием и информатикой.

Еще одна стратегия, которую я использую, - использовать анонимную функцию для инкапсуляции общей логики между различными условиями. Создайте его прямо перед блоком if, а затем используйте его там, где это необходимо. Это, похоже, создает код, который более читабельен и поддерживается.

Ответ 8

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

- один из способов упрощения.