【问题标题】:How to optimize boolean operation?如何优化布尔运算?
【发布时间】:2010-11-29 07:48:09
【问题描述】:

我有两个RadioButtons: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;
      }
    }
  }
}

我应该使用哪个运算符将每个条件写入一个字符串?

【问题讨论】:

    标签: c# .net operators boolean


    【解决方案1】:

    关键是 Enabled 属性在 value 为 false 并且对应的复选框被 checked 时保持不变。所以试试这个:

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

    【讨论】:

    • 只想指出,虽然针对空间进行了优化,但这段代码并没有比原始代码清晰得多。肯定会更好,因为更清楚地表明正在发生一些不稳定的事情,但不清楚为什么。当 OP 在他/她的项目中使用此代码时,值得添加注释来解释特殊条件及其存在的原因。
    • 我同意。这不是一个正常的、预期的算法。为清楚起见发表评论。
    【解决方案2】:

    以下内容与您正在执行的操作类似,但您的原始代码中有一个未处理的情况:if ((!value)&&(r1.Checked)), r1.Enabled is never set (same r2) 的条件。如果您将 r1.Enabled 和 r2.Enabled 设置为 true,默认情况下,以下代码可能就足够了。

    r1.Enabled = 值 || r1.检查; r2.Enabled = 值 || r2.检查;

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

    【讨论】:

      【解决方案3】:

      我认为这已经足够清楚了:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-09-11
        • 1970-01-01
        • 2013-02-01
        • 1970-01-01
        • 2011-12-29
        • 1970-01-01
        相关资源
        最近更新 更多