0

我编写了以下代码来在文档页脚的内容控件中插入一些文本。

oItem.File.CheckOut();
byte[] byteArray = oItem.File.OpenBinary();
using (MemoryStream mem = new MemoryStream())
{
    mem.Write(byteArray, 0, (int)byteArray.Length);
    using (WordprocessingDocument wp = WordprocessingDocument.Open(mem, true))
    {
        Boolean foundInFooter = false;
        MainDocumentPart mainPart = wp.MainDocumentPart;
        foreach (FooterPart footerPart in mainPart.FooterParts)
        {
            Word.Footer footer = footerPart.Footer;
            foreach (Word.SdtElement sdt in footer.Descendants<Word.SdtElement>().ToList())
            {
                Word.SdtAlias alias = sdt.Descendants<Word.SdtAlias>().FirstOrDefault();
                if (alias.Val.Value == "Revisionsnummer")
                {
                    foundInFooter = true;
                    if (sdt.Descendants<Word.Text>().FirstOrDefault() != null)
                    {
                        sdt.Descendants<Word.Text>().FirstOrDefault().Text = (string)oItem["Version"];
                    }
                }
            }
        }
    }
}   

出于某种原因,有时sdt.Descendants<Word.Text>().FirstOrDefault()返回 null 所以我无法插入文本。无论如何在这些情况下添加 Word.Text ?

4

1 回答 1

0

的前提.First/Single/OrDefault是您可以在使用之前检查表达式的结果。例如

var obj = sdt.Descendants<Word.Text>().FirstOrDefault();
if(obj!=null)
{
   obj.Text = (string)oItem["Version"];  
} 
else
{
   ...
}

如果您自动尝试为 a 的结果集分配一个值,OrDefault您将为空引用异常设置自己。

于 2013-05-07T13:43:31.727 回答