2011-11-24 47 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

相关问题