2012-01-19 30 views
1

我正在搞亂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; 
     } 
    } 

在「否則,如果」行,我有兩個「< =」和「69)」的錯誤。 「< =」錯誤是「無效的表達式項'< ='」,並且「69」)的四個錯誤是「期望的」,「無效的表達式項」),以及兩個「預期的」錯誤。

此代碼片段之外沒有任何變量影響此代碼。每個調用的變量都在代碼片段中定義。

(對於任何人好奇,「脾氣」代表「溫度」)

+0

未檢查是否存在冗餘?如果它成爲'else',那麼它必須是69或更小。 –

+2

除了正確的答案之外,如果你寫這樣的代碼:'if(40 <= x && x <= 69)',因爲這在詞彙上強調x是*之間的關係。 –

回答

7

你不能拿在這樣的布爾條件的快捷方式。

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

反而應該寫成:

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

注意,讓布爾值比較時,通常要使用雙符號&&。這會導致短路(只有在左側成功時才評估雙方),這通常是需要的。正如我所說的,兩次都需要包含temperInt標識符 - 不能說「某個變量的值大於一個值而小於另一個值」,就像在SQL BETWEEN子句中一樣。

更新:根據Eric的建議修正了答案。

+0

我可以問:兩者有什麼區別? (我的意思是什麼額外的&符號,我知道它在那裏) – h3half

+0

&&是邏輯AND和&是一個按位AND –

+1

兩個&符號用於比較布爾值。一個&符號用於按位操作。 (對'|'運算符也是如此) –

2

你probablly意味着temperInt >= 40 && temperInt <= 69

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

應該是:

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

你需要在語句的兩個部分的變量,&是按位與,而&&是一個邏輯與這是你在這種情況下想要的。

2

給定的代碼中有一些錯誤。

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

這實際上應

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

的& &是在C#中,而不是 '&' 邏輯運算符。此外,LHS部分需要用於所有的平等比較,不像您的代碼示例那樣鏈接。

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

是無效的C#。計算機語言比自然語言更具有限制性。您應該使用:

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

(你會注意到我還使用邏輯&&運營商,而不是按位&運營商 - 前者是真值,後者通常用於位操作,見this answer詳細內容)。

還有另一種選擇,使用的擴展方法:

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

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

更接近自然語言,但是這可能矯枉過正這種情況。