嘿所有,希望减少我的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})
答案 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