我正在搞乱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)”的四个错误是“)预期的”,“无效的表达式术语')'”,以及两个“;预期的”错误。
此代码片段之外没有任何变量影响此代码。调用的每个变量都在片段内定义。
(对于任何好奇的人,“脾气”代表“温度”)
答案 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部分需要在所有相等比较中使用,而不是像代码样本一样链接。