“< =是无效的表达术语”和“)预期”

时间:2012-01-19 03:43:41

标签: c#

我正在搞乱C#并正在制作一个原型GUI(没有附加游戏,只是搞乱按钮和按钮颜色)。我遇到了一个错误:

private void temperValue_Load(object sender, EventArgs e)
    {
        int temperInt = 23;
        temperInt = Convert.ToInt32(temperValue.Text);

        if (temperInt >= 70)
        {
            temperButton.BackColor = System.Drawing.Color.Red;
        }
        else if (temperInt >= 40 & <= 69)
        {
            temperButton.BackColor = System.Drawing.Color.DarkOrange;
        }
    }

在“else if”行中,“&lt; =”和“69”都出错。 “&lt; =”错误是“无效的表达式术语'&lt; ='”,“69)”的四个错误是“)预期的”,“无效的表达式术语')'”,以及两个“;预期的”错误。

此代码片段之外没有任何变量影响此代码。调用的每个变量都在片段内定义。

(对于任何好奇的人,“脾气”代表“温度”)

5 个答案:

答案 0 :(得分:7)

你不能在你的布尔条件中选择快捷方式。

else if (temperInt >= 40 & <= 69)

必须改为:

else if (temperInt >= 40 && temperInt <= 69)

请注意,在进行布尔比较时,通常需要使用双&符号&&。这会导致短路(如果左侧成功,则仅评估两侧),这通常是所需的。正如我所说,你需要同时包含temperInt标识符 - 你不能说“某个变量大于一个值而不是另一个变量”,就像在SQL BETWEEN子句中一样。

更新:根据Eric的建议修正了答案。

答案 1 :(得分:3)

if (temperInt >= 40 & <= 69) ...

无效C#。计算机语言比自然语言更具限制性。你应该使用:

if (temperInt >= 40 && temperInt <= 69) ...

(你会注意到我也使用逻辑&&运算符而不是按位&运算符 - 前者用于真值,后者通常用于位操作,请参阅{{3详情)。

还有另一种选择,使用扩展方法:

bool IsBetween (this int me, int lower, int upper) { 
    return (me >= lower) && (me <= upper); 
}

if (temperInt.IsBetween (40, 69)) ...

这更接近自然语言,但这可能对这种情况有点过分了。

答案 2 :(得分:2)

你可能意味着temperInt >= 40 && temperInt <= 69

答案 3 :(得分:2)

else if (temperInt >= 40 & <= 69)

应该是:

else if (temperInt >= 40 && temperInt <= 69)

您需要在语句的两个部分中包含变量,&是按位AND,而&&是逻辑AND,这是您在这种情况下所需的。

答案 4 :(得分:2)

给定代码中存在一些错误。

 else if (temperInt >= 40 & <= 69)
    {
        temperButton.BackColor = System.Drawing.Color.DarkOrange;
    }

这实际上应该是

 else if (temperInt >= 40 && temperInt <= 69)
    {
        temperButton.BackColor = System.Drawing.Color.DarkOrange;
    }

&amp;&amp;是C#中的逻辑AND运算符而不是'&amp;'。此外,LHS部分需要在所有相等比较中使用,而不是像代码样本一样链接。