0

我收到以下错误:

Object reference not set to an instance of an object

我不知道这个错误的原因是什么以及如何解决它,这是我的代码:

while(dr.Read())
    {
     string variant = dr.GetString(0);
     int size = dr.GetInt32(1);
     int quantity = dr.GetInt32(2);

     DataRow x = dt.Rows
                  .Cast<DataRow>()
                  .Where(r => r["variant_name"].Equals(variant) && r["size"].Equals(size))
                  .FirstOrDefault();
                  x["quantity"] = quantity;             

      }

我在这一行收到错误->x["quantity"] = quantity; 我想知道为什么它会给出一个空值,因为我在我的数据库中检查它应该返回一个匹配项。

4

3 回答 3

3

如果未找到该元素并且您尝试访问此对象,则 FirstOrDefault 将返回 null。

于 2013-05-27T12:23:29.243 回答
2

在最后一行 x 为空,修复

if(x != null)
   x["quantity"] = quantity;

如果您的条件 (.Where) 不匹配,就会发生这种情况。
此时FirstOrDefault返回默认部分
,这是参考对象的空值,如MSDN 中所述

引用类型和可空类型的默认值为空。

于 2013-05-27T12:22:41.443 回答
0
while(dr.Read())
 {
  string variant = dr.GetString(0);
  int size = dr.GetInt32(1);
  int quantity = dr.GetInt32(2);

  DataRow x = dt.Rows
                .Cast<DataRow>()
                .Where(r => (r["variant_name"].ToString().Equals(variant) && Convert.ToInt32(r["size"]).Equals(size)))
                .FirstOrDefault();

   if (x != null)
   {
       x["quantity"] = quantity;  
   }       
 }

谢谢你的回答,对我帮助很大。我只是.Where稍微改变了这条线,现在它对我有用。再次感谢你!

于 2013-05-28T02:17:55.753 回答