2009-09-17 5 views
0

У меня есть два RadioButton s: r1 и r2.Как оптимизировать логическую операцию?

я должен включить как на Enabled = true и отключить только бесконтрольно на Enabled = false

public bool Enabled 
{ 
    set 
    { 
    if(value) 
    { 
     r1.Enabled = value; // true 
     r2.Enabled = value; 
    } 
    else 
    { 
     if(!r1.Checked) 
     { 
     r1.Enabled = value; // false if not checked 
     } 
     if(!r2.Checked) 
     { 
     r2.Enabled = value; 
     } 
    } 
    } 
} 

Какой оператор я использовать, чтобы написать каждое условие в одной строке?

ответ

2

Ключа, что включено свойство остается как есть, когда значение является ложным и соответствующим флажок is проверено. Так что попробуйте это:

public bool Enabled 
{ 
    set 
    { 
    r1.Enabled = !r1.Checked? value: value || r1.Enabled; 
    r2.Enabled = !r2.Checked? value: value || r2.Enabled; 
    } 
} 

или

public bool Enabled 
{ 
    set 
    { 
     r1.Enabled = r1.Checked? value || r1.Enabled: value; 
     r2.Enabled = r2.Checked? value || r2.Enabled: value; 
    } 
} 
+0

Сразу хочу отметить, что, в то время как оптимизированная для пространства, этот код на самом деле не намного яснее, чем исходный код. Это определенно лучше, так как гораздо яснее, что происходит что-то неуловимое, но неясно, почему. Когда OP использует этот код в своем проекте, было бы целесообразно добавить комментарий, объясняющий особое условие и почему он существует. – atk

+0

Согласен. Это не обычный, ожидаемый алгоритм. Комментарий для ясности. –

0

Я думаю, что это достаточно ясно:

public bool Enabled 
{ 
    set 
    { 
    if (value || !r1.checked) { 
     r1.Enabled = value; 
    } 
    if (value || !r2.checked) { 
     r2.Enabled = value; 
    } 
    } 
} 
2

Следующая будет похоже на то, что вы делаете, но у вас есть необработанное случай в исходном коде: если ((значение) & & (r1.Checked)), r1.Enabled никогда не устанавливается (такое же условие для r2). Если вы установили r1.Enabled и r2.Enabled в true, по умолчанию где-то может быть достаточно кода.

 
r1.Enabled = value || r1.Checked; 
r2.Enabled = value || r2.checked; 

Если у вас есть странная зависимость, я ничего особо чистое, не видя ...

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

  • Нет связанных вопросов^_^