2012-04-18 20 views
1

爲什麼我不能用if語句更改值?如果語句不能更改本地變量

 int amount; 
     string inputbalk = inputbar.Text; 

     if (inputbalk== string.Empty) 
     { 
      amount = Convert.ToInt32(inputbalk); 
      amount = 1; 
     } 

     if (inputbalk != string.Empty) 
     { 
      amount = Convert.ToInt32(inputbalk); 
      amount = 1; 
     } 

     int onepercent = amount/= 100; 

它會看到「量」作爲一個未賦值的變量,即使我將其設置爲1,由兩個不同的if語句。

如果我調試,我得到這個: 「錯誤1使用未分配的局部變量‘量’的」


感謝您的幫助球員,這是固定/解決。

+2

調試代碼,看看會發生什麼。 – 2012-04-18 08:43:23

+1

什麼是「空變異」?據我所知,一點只能設置爲0或1,從不「空」。你可以說得更詳細點嗎? – 2012-04-18 08:45:02

+0

嘗試'if(string.IsNullOrEmpty(inputbalk)){'改爲 – 2012-04-18 08:45:36

回答

3

只要改變第二,如果到別的

 if (inputbalk== string.Empty) 
     { 
      amount = Convert.ToInt32(inputbalk); 
      amount = 1; 
     } 
     else 
     { 
      amount = Convert.ToInt32(inputbalk); 
      amount = 1; 
     } 

編譯器不能確保無論如何,兩個if語句中的一個將起作用,所以它會拋出錯誤,表示您的可變金額可能是unassigned

if/else表示法中,兩個代碼塊中的任何一個都將完成,因此編譯器不會拋出錯誤,並且所有內容都將按照您的要求工作。

1

因爲您有可能不會進入任何if語句,從而使金額未分配。您將獲得在這一行錯誤:

int onepercent = amount /= 100; 

在編譯時,編譯器將無法確定是否有任何的if語句,將導致真正的和數量的設置。爲了避免這種錯誤,你可以做(​​開始):

int amount=-1; 

現在你不會得到你的編譯器錯誤和金額的價值將在if語句改變。附: (「如果」是一個語句不是循環)

+0

保留「未分配」。空不適用於'int'。 – 2012-04-18 08:48:25

+0

錯誤將是「使用未分配的變量」 – Habib 2012-04-18 08:50:04

+0

@HenkHolterman,如果在這種情況下未分配金額,則會生成編譯時錯誤。 – Habib 2012-04-18 08:50:54

1

存在具有inputbalk爲空:)的機會

1
  1. if循環
  2. 考慮inputbalkstring,它可以null,你不檢查,所以可能發生的,它是你的情況。

更改代碼,如下所示:

if (string.IsNullOrEmpty(inputbalk)) 
{ 
    amount = Convert.ToInt32(inputbalk); 
    amount = 1; 
} 

else 
{ 
    amount = Convert.ToInt32(inputbalk); 
    amount = 1; 
} 

希望這有助於。

1

問題是,編譯器無法看到該數量是明確分配的。 知道inputBalk在第一次和第二次之間不能改變它的計算結果,而且其中的一個if條件是真的,但編譯器不檢查這個。它只會看到有一個路徑,在使用之前沒有分配金額,這是不允許的。

您應該使用if/else而不是測試兩次相同的條件。

if (...) 
{ 
    amount = 1; 
} 
else 
{ 
    amount = 2; 
} 

現在,編譯器可以看到通過代碼的每條可能路徑都會導致數量被明確分配。

還有一些其他優點:代碼更簡潔,更易於閱讀和更易於維護。此外,不做同樣的檢查兩次會帶來輕微的性能收益。

0

給這個爆炸:

if (!int.TryParse(inputbar.Text, out amount)) 
    amount = 1; 
1

您可以但是也遇到了Convert.ToInt32()方法的出現FormatException。考慮使用int.tryParse作爲替代。