获取NullReferenceException不知道为什么

时间:2011-11-24 12:39:56

标签: c# asp.net .net

我不是那个编码这行代码的人,而且我无法理解谁做了这个,为什么这样做就行了:res.Data.Find(itm => itm.Meta.ID.ToUpper() == i["MetaDataID"].ToString().ToUpper()).Value[i["LocaleID"].ToString()] = i["Value"].ToString(); 这一行给了我一个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()
                                      ));
                }
            }
        }
    }

很多人!这是我的工作解决方案,不再有例外了!

 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()
                //                      ));
                //}
            }
        }
    }

3 个答案:

答案 0 :(得分:2)

Old-skool调试:

使用局部变量将语句分解为其组成部分。单步执行并找到哪一个为空。

答案 1 :(得分:2)

在没有调试器下的代码的情况下无法准确回答,但可以肯定的是,至少下列之一的值为null

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

答案 2 :(得分:1)

检查以下其中一项是否为空:

i["MetaDataID"]
i["LocaleID"]
i["Value"]