![](/img/trans.png)
[英]Is it possible to shorten an OR statement with multiple conditions on the same variable?
[英]IF Statement multiple conditions, same statement
大家好,希望減少我的 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})
將&&
(and) 運算符與||
結合使用 (或)嵌套條件中的運算符如下:
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"
}
檢查這個以更集中地檢查條件:
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 ((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"
}
}
像這樣的東西怎么樣?
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
if (checkbox.checked && columnname != a && columnname != b && columnname != c)
{
"statement 1"
}
else if (columnname != a && columnname != b && columnname != c
&& columnname != A2)
{
"statement 1"
}
是一種簡化一點的方法。
我認為 Agileguy 有正確的答案,但我想補充一點,對於更困難的情況,我會采取一些策略來解決問題。 首先是使用真值表。 如果你用谷歌搜索“真值表”,你會遇到一些與編程和計算機科學直接相關的例子。
我采取的另一種策略是使用匿名函數來封裝各種條件之間的通用邏輯。 在 if 塊之前創建它,然后在需要的地方使用它。 這似乎創建了更具可讀性和可維護性的代碼。
var test = new char[] {a, b, c}.Contains(columnname));
if(test)
{
"true statement"
}
else
{
"false statement"
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.