Linq中的空引用异常

时间:2012-10-09 08:24:49

标签: c# xml linq c#-4.0

我是.net初学者。在问这里之前我经历了很多网站。我收到错误 - “对象引用未设置为对象的实例。” 。这个错误通常出现在任何控件中都有空值但在我的情况下每个控件都有一些文本,那么为什么会出现这个错误呢?这是我的xml file

cmbProduct        --> combobox 
txtNewBrand       --> textBox
txtUpdateQuantity --> textBox
txtUpdatePrice    --> textBox

我尝试了以下代码:

onButtonClick

XElement doc = XElement.Load(@"..\..\stock.xml");
var newElement = new XElement("items",
                               new XElement("productname", cmbProduct.Text),
                               new XElement("brandname", txtNewBrand.Text),
                               new XElement("quantity", txtUpdateQuantity.Text),
                               new XElement("price", txtUpdatePrice.Text));
 /*ERROR*/      doc.Element("stock").Add(newElement);
                doc.Save(xpath);
                MessageBox.Show("updated successfully");

编辑:

而不是使用

XElement doc = XElement.Load(@"..\..\stock.xml");

我用过

var doc = XDocument.Load(@"..\..\stock.xml");

问题解决了。为什么呢?

4 个答案:

答案 0 :(得分:1)

无法找到eather doc.Element(“stock”)且为NULL或doc为NULL

答案 1 :(得分:1)

鉴于代码有限,不容易看到您添加和/或断言存在的内容。尝试在错误之上添加这两行,错误消息将指示错误。

Debug.Assert(doc != null, "Can not operate without a valid instance of 'doc'");
Debug.Assert(doc.Element("stock") != null, "Need the stock element to add to!");

您可能需要包含“使用System.Diagnostics;”在文件的顶部。

答案 2 :(得分:1)

我猜您没有使用现有XML预加载doc,如果是这样,则不会有任何stock元素。

尝试添加此

if (doc.Element("stock") == null)
{
    doc.Add(new XElement("stock"));
}

doc.Element("stock").Add(newElement);

答案 3 :(得分:1)

您获得例外是因为:

doc.Element("stock").Add(newElement);

stock是根节点,doc.Element("stock")返回null。你实际上要做的是在你的xml中添加一个项目。请尝试以下方法:

doc.Add(newElement);

这将为您提供所需的结果。