2009-08-27 2 views
11

Эй, все, что нужно, чтобы уменьшить код в моих операторах C# if, поскольку есть несколько повторяющихся факторов, и задавался вопросом, возможно ли решение триммера.IF Утверждение нескольких условий, то же утверждение

В настоящее время у меня есть инструкции 2, которые должны выполнять идентичный оператор, однако единственная переменная является дополнительным условием для оператора 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 (columnname != a 
    && columnname != b 
    && columnname != c 
    && if(checkbox.checked{columnname != A2}) 
+0

BTW - т он же отвечает на C, C++ и Java. –

ответ

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

если сделать трюк.

+3

обычно, когда мои условия в операторах if более трех, я извлекаю их для частного метода, чтобы четко определить, что является условием –

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

- один из способов упростить процедуру.

3

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

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

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

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

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

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

6

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

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

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

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

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 
    } 

}