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

本文关键字:属性 方法 读取 中的 add xelement | 更新日期: 2023-09-27 18:28:49

我正在尝试创建一个XElement,该XElement从另一个从文件构建的XElement中读取。下面是一个代码示例。我的问题是,如何围绕可能不存在的源属性进行编码?docHeader和发票是X元素。当在缺少一个属性的地方运行此程序时,我会得到一个"Object reference not set to a instance of a Object"错误。

我想我在问,有没有一种"安全"的方式来读取元素和属性,以防它们不存在?

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

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

您将得到异常,因为如果属性InvoiceSource不存在,docHeader.Attribute("InvoiceSource")将返回null。像这样的简单检查

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

就足够了。

尝试分解代码,使其更加灵活和可读。

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