如何优化布尔运算?

时间:2009-09-17 22:33:52

标签: c# .net operators boolean

我有两个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 个答案:

答案 0 :(得分:2)

以下内容类似于您正在做的事情,但您的原始代码中有一个未处理的案例:if((!value)&&(r1.Checked)),r1.Enabled永远不会设置(r2的条件相同)。如果将r1.Enabled和r2.Enabled设置为true(默认情况下为某处),则以下代码可能就足够了。

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

如果你有奇怪的依赖,我没有看到任何特别干净......

答案 1 :(得分:2)

关键是当值为false且相应的复选框为 已选中 时,Enabled属性保持不变。所以试试这个:

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;   
  }
}

答案 2 :(得分:0)

我认为这很清楚:

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