我可以为“if”做这个吗?或者其他类似的方法
本文关键字:其他 或者 方法 if 我可以 | 更新日期: 2023-09-27 18:16:31
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的条件如下:
(a> 0 and(b> 0 or c> 0 or d> 0 or e> 0)) and((d1<75.5 and d1>74.5)或(d2<75.5 and d2>74.5))或(a1> 0 and(b> 0 or c> 0 or d> 0 or e> 0)) and((d1<75.5 and d1>74.5)或(d2<75.5 and d2>74.5))或(a> 0 and(b> 0 or c> 0 or d> 0 or e> 0)) and((d1<75.5 and d1>74.5)或(d2<75.5 and d2>74.5))或(3> 0 and(b> 0或c> 0或d> 0或e> 0))和((d1<(d2<75.5 and d1>74.5) or (d2<75.5 and d2>74.5))
对于相同条件a1到a3
因为我在这些代码之前创建了一个for循环来做一些检查,这些a a1 a2 a3 b c de是在for循环中的一些特殊条件下加了1的整数,我只是想在这个if()中做一些进一步的分组只是想知道这个多个"and"answers"or"是否有效
我会把它分解成更多的布尔值来简化它
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);
一般来说,当公共子表达式在复杂表达式中重复时,将它们放在单独的变量中会更清楚。在优化方面,这对编译器应该没有什么影响。
你的括号不平衡,所以我不是100%确定你的代码是表达什么,但例如,你可以声明
bool aThroughEGreaterEqualZero = (b > 0) || (c> 0) || (d> 0) || (e> 0);
并使用它来代替if
中所有出现的评估。
为了下一个维护代码的人,我将把if
语句中的表达式分解为许多有意义的命名变量,然后在实际的if
中使用这些变量。
您可以创建一个辅助方法来检查重复的代码,如:
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
}
我想最有用的修改是给你的变量一个可以理解的名字。代码的读者不太可能理解d1是什么以及为什么它必须小于…