【问题标题】:The statement if combobox selectedindex == 1 || 2 gives a syntax error in c#语句 if combobox selectedindex == 1 || 2 在 c# 中给出语法错误
【发布时间】:2014-05-01 13:18:26
【问题描述】:

我正在制作人类到动物的年份转换器。

我的代码:

if (comboBox2.SelectedIndex == 1 || 2)
{
   comboBox3.Visible = true;
} 

我收到以下错误:

运算符“||”不能应用于“bool”和“int”类型的操作数

【问题讨论】:

  • 我确实得到了答案,谢谢
  • 你可以写一个扩展方法让它看起来像if (comboBox2.SelectedIndex.In(1, 2))。这样可以减少重复。

标签: c# winforms


【解决方案1】:

问题:您认为可以解决的if 条件:

comboBox2.SelectedIndex == 1 || comboBox2.SelectedIndex == 2

实际上解析为:

(comboBox2.SelectedIndex == 1) || (2)

原因:等式运算符 (==) 的优先级高于条件 OR 运算符 (||)。

更多信息: MSDN: C# Operator Precedence and Associativity

(comboBox2.SelectedIndex == 1) || (2) 的第一部分返回 bool 类型的值,而第二部分返回 int 类型的值。

因此出现错误:

运算符“||”不能应用于“bool”和“int”类型的操作数

解决方法:您应该清楚地指定条件为:

comboBox2.SelectedIndex == 1 || comboBox2.SelectedIndex == 2

【讨论】:

    【解决方案2】:

    你不能像这样使用上面的表达式

    if (comboBox2.SelectedIndex == 1 || 2)
    {
       comboBox3.Visible = true;
    }
    

    你必须通过以下方式使用它:

    if (comboBox2.SelectedIndex == 1 || comboBox2.SelectedIndex == 2 )
    {
       comboBox3.Visible = true;
    } 
    

    【讨论】:

      【解决方案3】:

      您正在尝试检查对布尔值(左侧,比较运算符)和整数(右侧,只是一个数字)进行 OR 运算。

      OR (||) 必须应用于两个布尔值。

      所以你应该这样做:

      if (comboBox2.SelectedIndex == 1 || comboBox2.SelectedIndex == 2)
      {
         comboBox3.Visible = true;
      } 
      

      参考:http://msdn.microsoft.com/en-gb/library/6373h346.aspx#fbid=5K95u5HbB8E

      【讨论】:

        【解决方案4】:

        逻辑或运算符 (||) 用于对布尔值进行逻辑或运算。 你用英语这样的自然语言说

        “应该是蓝色或红色”

        但你真正的意思是

        “应该是蓝色的还是应该是红色的”

        计算机也是如此。它们只能对完整的表达式求值,而不能对快捷方式求值。

        请尝试以下方法:

        if (comboBox2.SelectedIndex == 1 || comboBox2.SelectedIndex==2)
        {
           comboBox3.Visible = true;
        }
        

        如果索引为 1,if 条件的第一部分计算布尔值,如果索引为 2,则第二部分计算布尔值。逻辑或运算符组合这两个值,如果其中一个值返回 true或者两者都是真的。

        【讨论】:

          【解决方案5】:

          你做错了,因为在 OR Operator 之后的第二个 condition 你错过了第一个 operand 。试试这段代码

          if (comboBox2.SelectedIndex == 1 || comboBox2.SelectedIndex==2)
          {
             comboBox3.Visible = true;
          } 
          

          【讨论】:

            【解决方案6】:
            (comboBox2.SelectedIndex == 1 || comboBox2.SelectedIndex == 2)
            

            【讨论】:

              【解决方案7】:

              使用这个if (comboBox2.SelectedIndex == 1 || comboBox2.SelectedIndex==2)

              而不是if (comboBox2.SelectedIndex == 1 || 2)

              || Operator

              条件或运算符 (||) 对其布尔操作数执行逻辑或。如果第一个操作数的计算结果为真,则不计算第二个操作数。如果第一个操作数的计算结果为 false,则第二个运算符确定整个 OR 表达式的计算结果为 true 还是 false。


               if (comboBox2.SelectedIndex == 1 || comboBox2.SelectedIndex==2)
                  {
                     comboBox3.Visible = true;
                  } 
              

              【讨论】:

                【解决方案8】:

                为了让它更加优雅和灵活,有这个:

                comboBox3.Visible = (new[] { 1, 2 }).Contains(comboBox2.SelectedIndex);
                

                这样,您可以根据需要添加尽可能多的值,而无需为每个值添加其他条件。

                如果您不想将可见性设置为 false,而只是在满足条件时设置为 true,则可以:

                comboBox3.Visible = (new[] { 1, 2 }).Contains(comboBox2.SelectedIndex) ? true : comboBox3.Visible;
                

                【讨论】:

                • 酷,但这不一样:如果 SelectedIndex 不是 1 或 2,Visible 设置为 false。这可能不是故意的。
                • @helb 可能,但通常默认情况下它会设置为 false,并且只有在满足条件时才可见,因此这将产生相同的影响。编辑只是为了确保所有角落都已关闭。
                【解决方案9】:

                逻辑运算符只能在两个布尔值之间使用。但是在您的情况下,第一个是布尔值,第二个被视为整数,因为您没有在那里写任何条件。

                所以,写下面的语句

                if ((comboBox2.SelectedIndex == 1) || (comboBox2.SelectedIndex==2))
                {
                   comboBox3.Visible = true;
                }
                

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 2016-09-10
                  • 1970-01-01
                  • 2011-09-22
                  • 1970-01-01
                  • 2015-09-08
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多