从C#中的xelement.add方法中可能缺少的属性读取

时间:2012-03-24 16:59:50

标签: c# xelement xattribute

我正在尝试创建一个XElement,它从另一个从文件构建的XElement中读取。以下是代码示例。我的问题是如何围绕可能不存在的源属性进行编码? docHeader和invoice是XElements。在缺少一个属性的情况下运行时,我得到“对象引用未设置为对象的实例”错误。

我想我问的是,如果元素和属性不存在,是否有'安全'的方法来阅读它们?

invoice.Add(
    new XAttribute("InvoiceNumber", docHeader.Attribute("InvoiceNumber").Value), 
    new XAttribute("InvoiceSource", docHeader.Attribute("InvoiceSource").Value));

2 个答案:

答案 0 :(得分:0)

您收到异常,因为如果属性InvoiceSource不存在,docHeader.Attribute("InvoiceSource")将返回null。像

一样简单检查
if (docHeader.Attribute("InvoiceSource") != null)
{
    // here you can be sure that the attribute is present
}

就足够了。

答案 1 :(得分:0)

尝试分解代码,使其更灵活,更易读。

var src = docHeader.Attribute("InvoiceSource");
var num = docHeader.Attribute("InvoiceNumber");

if(src != null && num != null)
{
  invoice.Add(
    new XAttribute("InvoiceNumber", num.value), 
    new XAttribute("InvoiceSource", src.value)); 
}