Как оптимизировать логическую операцию? - PullRequest
0 голосов
/ 18 сентября 2009

У меня есть два 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;
      }
    }
  }
}

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

Ответы [ 3 ]

2 голосов
/ 18 сентября 2009

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

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

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

2 голосов
/ 18 сентября 2009

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

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 голосов
/ 18 сентября 2009

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

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