2011-12-01 2 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 
} 

просто хотят, чтобы сделать состояние ПЧ в следующем виде:C# Могу ли я сделать это для «если»? или любой другой способ сделать это так?

(а> 0 и (б> 0 или с> 0 или г> 0 или е> 0)) и ((d1, < 75,5 и d1> 74,5) или (d2 < 75,5 и d2> 74,5)) или (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)) или (a3 > 0 и (b> 0 или c> 0 или d> 0 или e> 0)) и ((d1 < 75,5 и d1> 74,5) или (d2 < 75,5 и d2> 74,5))

для того же условия для a1-a3

cos Я создал цикл for перед этим кодом, чтобы выполнить некоторую проверку, а те a, a1, a2, a3, b, c, d, e - это ints, которые добавили 1 под некоторые специальное условие в цикле for, и я просто хочу сделать некоторую дополнительную группировку в этом if() и просто задаюсь вопросом, будут ли работать эти мультисайты «Ands» и «Ors»

+0

Можете ли вы попытаться изменить это в форме вопроса? Это немного непонятно, что вы ищете. Благодарю. –

+2

Это сайт на английском языке. «sth» не является английским. –

+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 и почему он должен быть меньше, чем ...

Смежные вопросы