C# 如果语句有多个条件,则为同一语句
嘿,大家好,我想减少我的c#if语句中的代码,因为有几个重复的因素,我想知道一个微调解决方案是否可行 我目前有两个if语句需要执行相同的语句,但是唯一的变量是if语句上的一个额外条件,即当复选框未选中时。我只是想知道是否有办法使其成为一个语句或使条件字符串变量,以下是代码的压缩版本:C# 如果语句有多个条件,则为同一语句,c#,C#,嘿,大家好,我想减少我的c#if语句中的代码,因为有几个重复的因素,我想知道一个微调解决方案是否可行 我目前有两个if语句需要执行相同的语句,但是唯一的变量是if语句上的一个额外条件,即当复选框未选中时。我只是想知道是否有办法使其成为一个语句或使条件字符串变量,以下是代码的压缩版本: if (checkbox.checked) { if (columnname != a && columnname != b && columnname != c)
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 (checkbox.checked && columnname != a && columnname != b && columnname != c)
{
"statement 1"
}
else if (columnname != a && columnname != b && columnname != c
&& columnname != A2)
{
"statement 1"
}
是简化一点的一种方法。这不一样吗:
if ((checkbox.checked || columnname != A2) &&
columnname != a && columnname != b && columnname != c)
{
"statement 1"
}
如果你认为这更清楚,你也可以这样做:
if (columnname != a
&& columnname != b
&& columnname != c
{
if (checkbox.checked || columnname != A2)
{
"statement 1"
}
}
我认为agileguy有正确的答案,但我想补充一点,对于更困难的情况,我会采取一些策略来解决这个问题。第一种方法是使用一种新方法。如果你在谷歌上搜索“真值表”,你会遇到一些与编程和计算机科学直接相关的例子
我采取的另一个策略是使用匿名函数来封装各种条件之间的公共逻辑。在if块之前创建它,然后在需要的地方使用它。这似乎创建了更具可读性和可维护性的代码。我总是尝试将复杂的布尔表达式分解成有意义的变量(根据这些列的用途,您可能会想到更好的名称):
这是一个很老的问题,但请检查此问题,以获得更群集的检查条件的方法:
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
}
}
像这样的怎么样
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
顺便说一句,C、C++和Java.同样的答案是有效的。通常当IF语句中的条件大于三时,我将它们提取到私有方法中,以明确条件是什么。
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
}
}
var test = new char[] {a, b, c}.Contains(columnname));
if(test)
{
"true statement"
}
else
{
"false statement"
}
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