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

ところで、文字列の両側に 'ToUpper()'ではなく 'string.Compare()'を使用する方が効率的です。 –

+0

hm私はそれがわからなかった...私は交換されます。他のコードでもこれをやってみたいですが、ヒントはたくさんあります!!! – ShadowG

答えて

2

インポッシブルデバッガでコードを持たずに正確に答えるために、しかし、次の少なくとも一つがnullの値を有することである特定のものです:

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

Thx問題の解決に役立ちました! – ShadowG

2

旧・スコールのデバッグ: - ローカル変数を使用して

がダウンし、それはconsituent部品だと声明をブレーク

。ステップスルーし、どちらがヌルであるかを見つける。

1

チェック次のいずれかがnullの場合:

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

Thx問題の解決に役立ちました! – ShadowG

関連する問題