2011-11-24 130 views
0

我不是誰編碼這行代碼的人,我不能瞭解誰做的人,爲什麼在這條線上這樣:res.Data.Find(itm => itm.Meta.ID.ToUpper() == i["MetaDataID"].ToString().ToUpper()).Value[i["LocaleID"].ToString()] = i["Value"].ToString(); 這條線給我一個NullReferenceException。我怎樣才能解決它?獲取NullReferenceException不知道爲什麼

public static void LoadData(Value.Item _res) 
    { 
     DataTable Res = Connector.Run("SELECT * FROM Data WHERE ItemID='" + _res.ID + "'"); 

     if (Res.Rows.Count != 0) 
     { 
      foreach (DataRow i in Res.Rows) 
      { 
       try 
       { 
        _res.Data.Find(itm => itm.Meta.ID.ToUpper() == i["MetaDataID"].ToString().ToUpper()).Value[i["LocaleID"].ToString()] = i["Value"].ToString(); 
       } 
       catch (Exception) 
       { 
        _res.Data.Add(new Value.Data(
             i["ID"].ToString(), 
             i["Value"].ToString(), 
             i["LocaleID"].ToString(), 
             i["MetaDataID"].ToString() 
            )); 
       } 
      } 
     } 
    } 

Thx很多傢伙!這是我的工作解決方案,不再有任何異常!

public static void LoadData(Value.Item _res) 
    { 
     DataTable Res = Connector.Run("SELECT * FROM Data WHERE ItemID='" + _res.ID + "'"); 

     if (Res.Rows.Count != 0) 
     { 
      foreach (DataRow i in Res.Rows) 
      { 
       bool _flagged = false; 

       var _result = _res.Data.Find(itm => itm.Meta.ID.ToUpper() == i["MetaDataID"].ToString().ToUpper()); 

       if(_result != null && i["LocaleID"] != null) 
       { 
        if (i["Value"] == null || i["LocaleID"] == null || i["MetaDataID"] == null) 
         _flagged = true; 

       } 
       else 
       { 
        _flagged = true; 
       } 


       if (_flagged) 
       { 
        _res.Data.Add(new Value.Data(
             i["ID"].ToString(), 
             i["Value"].ToString(), 
             i["LocaleID"].ToString(), 
             i["MetaDataID"].ToString() 
            )); 
       } 

       //try 
       //{ 
       // _res.Data.Find(itm => itm.Meta.ID.ToUpper() == i["MetaDataID"].ToString().ToUpper()).Value[i["LocaleID"].ToString()] = i["Value"].ToString(); 
       //} 
       //catch (Exception) 
       //{ 
       // _res.Data.Add(new Value.Data(
       //      i["ID"].ToString(), 
       //      i["Value"].ToString(), 
       //      i["LocaleID"].ToString(), 
       //      i["MetaDataID"].ToString() 
       //      )); 
       //} 
      } 
     } 
    } 
+0

順便說一句,你知道在字符串的兩邊使用'string.Compare()'而不是'ToUpper()'會更有效率嗎? –

+0

嗯,我不知道這是......我會替換。也得在其他代碼上做這個,但thkx很多的提示! – ShadowG

回答

2

無法準確回答,而不在調試器下有代碼,但是可以肯定的是,以下的至少一個具有null值:

_res.Data 
itm.Meta 
itm.Meta.ID 
i["MetaDataID"] 
i["LocaleID"] 
i["Value"] 
+0

Thx幫助解決問題! – ShadowG

2

老斯庫爾調試:

語句拆分到它的consituent部分 - 使用本地變量。逐步查找哪一個是空的。

1

檢查下列之一是空的:

i["MetaDataID"] 
i["LocaleID"] 
i["Value"] 
+0

Thx幫助解決問題! – ShadowG