Ответ 1
if (columnname != a
&& columnname != b
&& columnname != c
&& (checkbox.checked || columnname != A2))
{
"statement 1"
}
Должен сделать трюк.
Эй, все, чтобы уменьшить код в моих операторах С# 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})
if (columnname != a
&& columnname != b
&& columnname != c
&& (checkbox.checked || columnname != A2))
{
"statement 1"
}
Должен сделать трюк.
if (columnname != a && columnname != b && columnname != c
&& (columnname != A2 || checkbox.checked))
{
"statement 1"
}
Я всегда стараюсь разложить сложные логические выражения на значимые переменные (вы, вероятно, могли бы подумать о лучших именах, основанных на том, для чего используются эти столбцы):
bool notColumnsABC = (columnname != a && columnname != b && columnname != c);
bool notColumnA2OrBoxIsChecked = ( columnname != A2 || checkbox.checked );
if ( notColumnsABC
&& notColumnA2OrBoxIsChecked )
{
"statement 1"
}
Разве это не то же самое:
if ((checkbox.checked || columnname != A2) &&
columnname != a && columnname != b && columnname != c)
{
"statement 1"
}
Довольно старый вопрос, но проверьте это для более кластерного способа проверки условий:
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
}
}
Вы также можете сделать это, если считаете это более понятным:
if (columnname != a
&& columnname != b
&& columnname != c
{
if (checkbox.checked || columnname != A2)
{
"statement 1"
}
}
Я думаю, что у agileguy есть правильный ответ, но я хотел бы добавить, что для более сложных ситуаций есть несколько стратегий, которые я принимаю для решения проблемы. Во-первых, используйте таблицу истинности . Если вы Google "таблица истинности" , вы столкнетесь с некоторыми примерами, непосредственно связанными с программированием и информатикой.
Еще одна стратегия, которую я использую, - использовать анонимную функцию для инкапсуляции общей логики между различными условиями. Создайте его прямо перед блоком if, а затем используйте его там, где это необходимо. Это, похоже, создает код, который более читабельен и поддерживается.
if (checkbox.checked && columnname != a && columnname != b && columnname != c)
{
"statement 1"
}
else if (columnname != a && columnname != b && columnname != c
&& columnname != A2)
{
"statement 1"
}
- один из способов упрощения.