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

C# 读取C中xelement.add方法中可能缺少的属性,c#,xelement,xattribute,C#,Xelement,Xattribute,我正在尝试创建一个XElement,该XElement读取从文件构建的另一个XElement。下面是代码示例。我的问题是,如何对可能不存在的源属性进行编码?单据头和发票都是要素。在缺少一个属性的情况下运行此命令时,我得到一个对象引用,该引用未设置为对象错误的实例 我想我是在问,如果元素和属性不存在,是否有一种“安全”的方法来读取它们 invoice.Add( new XAttribute("InvoiceNumber", docHeader.Attribute("InvoiceNumbe

我正在尝试创建一个XElement,该XElement读取从文件构建的另一个XElement。下面是代码示例。我的问题是,如何对可能不存在的源属性进行编码?单据头和发票都是要素。在缺少一个属性的情况下运行此命令时,我得到一个对象引用,该引用未设置为对象错误的实例

我想我是在问,如果元素和属性不存在,是否有一种“安全”的方法来读取它们

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

您将获得异常,因为如果属性InvoiceSource不存在,则docHeader.AttributeInvoiceSource将返回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)); 
}

谢谢你,尼古拉。我尽量不把作业分解,因为我有大约40个作业要做,但我想我别无选择。