2011-12-01 60 views
1
if ((((a > 0) && ((b > 0) || (c> 0) || (d> 0) || (e> 0))) || 
((a1 > 0) && ((b> 0) || (c > 0) || (d > 0) || (e> 0))) || 
((a2 > 0) && ((b> 0) || (c> 0) || (d> 0) || (e> 0))) || 
((a3> 0) && ((b> 0) || c> 0) || (d> 0) || (e> 0)))) && 
((75.5 > d1 && d1 > 74.5) || (75.5 > d2 && d2 > 74.5))) 
{ 
    //do something 
} 

只想使IF的條件如下所示:c#我可以爲「if」做這個嗎?或者以任何方式做這樣的事情?

(α> 0和(b> 0或c> 0或d> 0或E> 0))和((D1 < (a1> 0和(b> 0或c> 0或d> 0或e> 0))和((d1> <> 75.5和d1> 74.5)或(d2 = < 75.5且d2> 74.5)) 或 (a2> 0且(b> 0或c> 0或d> 0或e> 0))和(d1> < 75.5且d1> 74.5)或(d2 = < 75.5且d2> 74.5)) 或 74.5)或(d2 < 75.5和d2> 74.5)) 或 (a3 > 0和(b> 0或c> 0或d> 0或e> 0))和((d1,< 75.5和d1> 74.5)或(d2,<75.5和d2> 74.5))

條件爲a1到a3

因爲我已經創建了一個for循環之前這些代碼做一些檢查,並且那些a,a1,a2,a3,b,c,d,e是已添加1下的一些ints for循環中的特殊條件,我只是想在這個if()中做一些進一步的分組,並且只是想知道這個多「Ands」和「Ors」是否可以工作

+0

你可以嘗試編輯這個問題的形式嗎?這有點不清楚你在找什麼。謝謝。 –

+2

這是一個只有英文的網站。 「某事」不是英語。 –

+0

我想英語是n00bs ... – Mehrdad

回答

1

通常情況下,放置當它們在複雜表達式中重複時,分離變量中的常見子表達式。就優化而言,這對編譯器沒有任何影響。

你的括號不均衡,所以我不能100%確定你的代碼表示,但是,例如你可以聲明

bool aThroughEGreaterEqualZero = (b > 0) || (c> 0) || (d> 0) || (e> 0); 

和使用,在地方評估所有出現在你的if

爲了維護代碼的下一個人,我會將if語句中的表達式分解爲若干有意義的變量,然後在實際的if中使用這些變量。

3

我會打破這一點,爲更多的布爾簡化它

bool biggerZero = (b > 0) || (c> 0) || (d> 0) || (e> 0)); 
bool anAzero = a > 0 || a1 > 0 || a2 > 0 || a3 > 0; 
bool d1range = 75.5 > d1 && d1 > 74.5; 
bool d2range = 75.5 > d2 && d2 > 74.5; 
bool solution = anAzero && biggerZero && (d1range || d2range); 
0

你可以讓一個輔助方法來檢查,如重複碼:

Func<bool> conditionExpression => (int a, int b, int c, int d, int e) => 
{ 
    return a > 0 && (b | c |d | e) > 0; 
} 
bool dWithinRange = (d1 < 75.5 && d1 > 74.5) || (d2 < 75.5 and d2 > 74.5); 

if (conditionExpression(a, b, c, d, e) && 
    conditionExpression(a1, b1, c1, d1, e1) && 
    conditionExpression(a2, b2, c2, d2, e2) && 
    conditionExpression(a3, b3, c3, d3, e3) && 
    dWithinRange 
{ 
    // finally 
} 

我queess然而,最有幫助的修改將是給你的變量可理解的名字。你的代碼讀者不太可能理解d1是什麼以及爲什麼它必須小於...