2011-07-03 65 views
3

我有這個下面的代碼:
我得到的錯誤, 「未分配的本地變量的使用」我敢肯定,這是死的簡單,但即時通訊困惑..C#:使用未分配的局部變量,使用foreach如果

public string return_Result(String[,] RssData, int marketId) 
    { 
     string result; 
     foreach (var item in RssData) 
     { 
      if (item.ToString() == marketId.ToString()) 
      { 
       result = item.ToString(); 
      } 
      else 
      { 
       result = ""; 
      } 

     } 
     return result; 
    } 
+0

問題是不是與foreach循環,但你有一個單獨的問題,在那裏... – BoltClock

回答

10

當你聲明它時,初始化結果。如果集合爲空,則不會執行if語句的分支,並且在返回之前結果永遠不會被分配。

public string return_Result(String[,] RssData, int marketId) 
{ 
    string result = ""; 
    foreach (var item in RssData) 
    { 
     if (item.ToString() == marketId.ToString()) 
     { 
      result = item.ToString(); 
     } 
    } 
    return result; 
} 
+0

+1:'item.ToString()'?項目是什麼?有點困惑。 – naveen

2

如果在RssData沒有項目,然後result將從未設置,因而無效。

要麼初始化result(例如,string result = null;),或考慮在設計中通過檢查空虛,設置或在那種情況下返回故障狀態。

1

如果RssData有零項,循環將不會運行,而使result未定義。您需要初始化它(例如string result = "";)以避免此錯誤。

2

這是因爲編譯器無法知道RssData中總是有任何項目。如果它是空的,循環中的代碼永遠不會被執行,變量也不會被賦值。

只需設置變量在創建它爲空,所以它總是有一個值:

string result = null; 
+0

+1:它總是關於@eric lippert :) @Guffa:一個疑問。這是一個更好的任務。 'String.Empty'或'null'? – naveen

+0

@naveen:這將取決於你希望在'RssData'實際上是空的情況下。除此之外,我更喜歡'null',因爲它只是一個文字零值,而'String.Empty'是一個必須從某處複製的引用。 – Guffa

1

更改您的線從

string result; 

string result = string.Empty; // or null depending on what you wish to return (read further) 

的編譯器只是說「嘿,你正在使用結果,它還沒有被分配!」。如果你在初始實例化時沒有這樣做,這甚至會在首次分配時產生。

如果你返回一個空字符串,你也需要考慮如何處理你的代碼,因爲你的數組參數是空的。您可以選擇返回空字符串或空值。這只是一個行爲決定。