2013-02-09 48 views
1

弄糊塗了,爲什麼這是給我的錯誤,我想我的代碼是正確的Linq to XML顯示錯誤「使用未分配的本地變量..」?

XElement outer = new XElement("Main"); 
XElement xsets; 
XElement xsubsets; 
foreach (DataRow nav_sets in GetNavigationSets().Rows) 
{ 
    if (nav_sets["parent_id"].ToString() == null) 
    { 
     xsets = new XElement("Menu", nav_sets["name"].ToString()); 
    } 
    else 
    { 
     if (int.Parse(nav_sets["id"].ToString()) == int.Parse(nav_sets["parent_id"].ToString())) 
     { 
      xsubsets = new XElement("SubMenu", nav_sets["name"].ToString()); 
      foreach (DataRow nav_menus in GetMenusInNavigationSetByNavigation(int.Parse(nav_sets["id"].ToString())).Rows) 
      { 
       foreach (DataRow menus in GetMenuById(int.Parse(nav_menus["menu_id"].ToString())).Rows) 
       { 
        xsubsets.Add(new XElement("MenuItem", menus["name"].ToString())); 
       } 
      } 
     } 
     xsets.Add(xsubsets); 
    } 
    outer.Add(xsets); 
} 
outer.Save("main.xml"); 
cn.Close(); 

錯誤部分顯示在這行代碼xsets.Add(xsubsets);

錯誤:

錯誤1所使用的未分配局部變量'xsets'
錯誤2使用未分配的局部變量'xsubsets'

弄糊塗了我該如何擺脫這個錯誤。

+0

你爲什麼感到困惑?錯誤消息確切地說明了問題所在。 – svick 2013-02-09 00:49:16

回答

2

變化從

XElement xsets; 
XElement xsubsets; 

XElement xsets = null; 
XElement xsubsets = null; 
+0

我已經試過這個,它給了我錯誤「Error 'System.Xml.Linq.XElement'不包含一個構造函數,它帶有0個參數 」 – MekeniKine 2013-02-09 00:43:18

+1

根據OP的反饋更改了答案。 – Lokerim 2013-02-09 00:50:02

+0

謝謝!,它是空的會做的伎倆:D – MekeniKine 2013-02-09 00:51:01

1

的問題,你所面對的是,編譯器不能在編譯時告訴if語句的第一種情況是之前拍攝第二是。同樣在第二種情況下,它不知道在使用xsubsets之前,if語句將評估爲true並創建它。雖然由於預期輸入的格式您可能知道這一點,但編譯器不能,並且會給出有關使用未分配變量的錯誤。通過給變量賦初值(即使是null),你給它們一個值,編譯器會很滿意你知道你在做什麼,沒有犯錯。當然,如果你將它們設置爲null然後嘗試在它們被使用之前在它們上面引用屬性,你會得到一個運行時異常,但如果你確信你滿足其標準。

通過分配初始值null解決編譯器警告。我的選擇是超出這個範圍,並在使用它們之前檢查null值,以便您可以使用更有意義的錯誤消息引發異常並記錄異常情況。

相關問題