2011-12-01 91 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是什么以及为什么它必须小于...