2012-05-17 143 views
0

我創建了一個函數來返回設備類型的int值,如下所示:從函數返回值的錯誤

public int getDeviceType(string device) 
    { 
     int temp; 
     if (device.ToLower() == "android") 
     { 
      temp = 1; 
     } 
     else if (device.ToLower() == "ios") 
     { 
      temp = 2; 
     } 
     return temp; 

    } 

而且我想返回設備類型。

但它給我,

"Use of unassigned variable temp" 

我怎麼能解決這個問題的錯誤?

謝謝。

+0

就像一個註釋,「temp」永遠不會被設置爲:2.你確定這是你應該這樣做的方式嗎? – ry8806

回答

4

只是初始化臨時使用默認值象下面

public int getDeviceType(string device) 
{ 
    int temp = 0; 
    if (device.ToLower() == "android") 
    { 
     temp = 1; 
    } 
    else if (device.ToLower() == "ios") 
    { 
     temp = 2; 
    } 
    return temp; 

} 
+0

只是做它,然後編譯然後看。我知道int默認值爲0默認值我的意思是你要返回,如果如果和如果其他評估爲false那麼應該返回什麼值 – Waqar

+0

嗯..:)你是對的。有用。謝謝。 – Rohan

1

初始化temp0因爲如果沒有在任何情況下,去然後將它返回什麼溫度值。

我知道int默認值是0但仍然在這些情況下,你必須初始化它。直到那時它不會運行。

0

當整數變量具有默認值0以及爲什麼需要對其進行初始化時,此行爲的根本原因分析。

對於局部變量,編譯器有一個關於流程的好主意 - 它可以看到變量的「讀取」和變量的「寫入」,並證明(在大多數情況下)第一次寫入會發生在第一次閱讀之前。

實例變量不是這種情況。考慮一個簡單的屬性 - 你怎麼知道是否有人會在他們得到它之前設置它?這使得強制執行明智的規則基本上不可行 - 所以要麼必須確保所有字段都在構造函數中設置,或者允許它們具有默認值。 C#團隊選擇了後一種策略。

0

基本上編譯器希望確保您初始化所有變量。本地和實例。所以從理論上講,你總是必須初始化所有的變量。

但是,由於編譯器無法確定實例變量是否在首次讀取之前被初始化,編譯器會隱式地將所有實例變量初始化爲其默認值。

因此,例外情況並不是一個本地變量不會自動初始化,例外情況是一個實例變量確實會自動初始化