2012-07-06 31 views
0

我得到一個錯誤,在代碼中的if語句中的變量intAge下方的紅線。它說這個變量是本地的,但是它在代碼的開頭聲明的時候怎麼會是本地的呢?它是否與Try/Catch部分有關?我的代碼看起來像這樣的原因,僅僅是因爲我必須在代碼中使用Try/Catch來執行此任務。請提供一些建議以相似和正確的方式解決此問題?謝謝!本地變量和Try/Catch

int intAge; 

     try 
     { 
      intAge = int.Parse(age); 
     } 
     catch (Exception) 
     { 
      MessageBox.Show("Enter an age in numbers!","Error!"); 
     } 
     finally 
     { 

     } 
     // Check input 
     if (intAge < 1) 
     { 
      inputOk = false; 
      errorMessage = "Please enter 1 or higher!"; 
     } 
+3

這次很容易知道你的錯誤信息告訴你'intAge'是未初始化的,但下一次包括你得到的實際錯誤信息。當您的代碼示例變得更長和更復雜時,包括錯誤消息可幫助人們更快地發現問題。 – 2012-07-06 09:03:40

+1

養成使用TryParse API的習慣。 – Zenwalker 2012-07-06 09:09:26

+0

_「局部變量」_僅表示在方法內聲明(「已定義」)的變量。所以這是本地的方法。相反的是一個_field_,它是一個在課堂上定義的變量。還有一個_parameter_,它是你的方法簽名中聲明的一個變量。但是,所有這些與編譯時錯誤無關。 – 2012-07-06 09:13:53

回答

3

只是初始化INTAGE:

int intAge = 0; 

你得到錯誤使用未分配的局部變量的。

由於您在try塊中賦值,編譯器無法確定賦值是否發生(如果int.Parse(age)引發異常),然後在您的檢查if(intAge<1)中得到錯誤因爲您正在使用之前未分配的變量。

Definite assignment - MSDN

在函數構件的可執行代碼的給定位置,一 變量被認爲是明確賦值如果編譯器可通過靜態流分析證明, ,該變量已經自動 已初始化或已成爲至少一項作業的目標。

+0

感謝您的幫助! – 2012-07-06 09:15:42

+0

@ 3D-kreativ,歡迎您 – Habib 2012-07-06 09:16:05

2

它是本地的,因爲它在本地範圍內聲明。你的代碼可以更好的結構類似:

int intAge; 

if (!int.TryParse(age, out intAge)) 
{ 
    MessageBox.Show(... 
} 
else 
{ 
    if (intAge < 1) 
     { 
      inputOk = false; 
      errorMessage = "Please enter 1 or higher!"; 
     } 
} 

與您的代碼你上面會顯示兩個錯誤,一個非數值,然後一個小於1的編譯器的初始抱怨是因爲你的整數是不保證被初始化。

+0

@Saeed:相互衝突的編輯? – Vlad 2012-07-06 09:03:37

+0

嗯,是的,你提供了一個更好的做法(比以前的嘗試),但intAge不在本地範圍內,其他答案是正確的(與這個問題有關),你的答案仍然適用。 – 2012-07-06 09:05:54

+0

這絕對是在本地範圍內,它不保證被初始化。除非我在OP中的代碼示例中缺少一點,否則它們都是相同的範圍。 – Paddy 2012-07-06 09:31:59

3

如果int.Parse失敗,則不會初始化intAge變量。 你可以在delecration

int intAge = 0; 

初始化它你可以避開雙重錯誤:

int intAge; 

    if (!int.TryParse(age, out intAge)) 
    { 
     inputOk = false; 
     errorMessage = "Enter an age in numbers!"; 
    } 
    else 
    { 
     // Check input 
     if (intAge < 1) 
     { 
      inputOk = false; 
      errorMessage = "Please enter 1 or higher!"; 
     } 
    } 
1

編譯器抱怨說,局部變量intAge可能沒有被使用時第一次初始化。當int.Parse(age)引發異常時可能發生這種情況。要糾正這種情況,只需將intAge初始化爲適當的值即可。

0

問題是未初始化的年齡初始化爲0,並嘗試。它必須工作