集合计数方法中的OpenXML C#异常

集合计数方法中的OpenXML C#异常,c#,ms-word,openxml,C#,Ms Word,Openxml,我正在打开并编辑C#OpenXML库中的Word DOCX 我有以下代码: IEnumerable<Break> breaks = p.Descendants<Break>().Where(s => s != null && s.Type == BreakValues.Page); int count = breaks.Count(); // THIS THROWS EXCEPTION! 返回false: breaks == null? : Fal

我正在打开并编辑C#OpenXML库中的Word DOCX

我有以下代码:

IEnumerable<Break> breaks = p.Descendants<Break>().Where(s => s != null && s.Type == BreakValues.Page);
int count = breaks.Count(); // THIS THROWS EXCEPTION!
返回false:

breaks == null? : False
这是图书馆里的错误吗

---编辑---


看起来p.subjects()中的一个项为null

请尝试这样做,明确忽略列表中为null的项!=null

IEnumerable breaks=p.subjects()。其中(s=>s!=null&&s.Type==BreakValues.Page);
如果这不起作用,显式地循环它,看看会发生什么

var breaks = p.Descendants<Break>();
foreach(var item in breaks)
{
//debug every item and see what is coming out of item.Type
}
var breaks=p.subjects();
foreach(分段中的var项目)
{
//调试每个项目并查看项目的结果。键入
}
编辑:


更仔细地观察,问题不在于集合中的项为null,而是在于将“Break”xml节点转换为Break对象。无法将其中一个属性值转换为枚举类型。i、 我怀疑其中一个Break节点是否有一个名为“Page”的属性,它的值是否为空,或者Page属性本身是否不存在!只要浏览一下xml,也许你就能明白这一点


可能您可以尝试将Break类的“Type”属性的数据类型更改为string,而不是BreakValues。Page enum value-只是为了查看理论是否正确。

我还检查了s是否为null,这是否有帮助。没有帮助。这太令人费解了。更改了条件的顺序-检查s!=一开始是空的!没用。似乎是图书馆的问题,或者可能是C#?我非常怀疑这一点。你为什么不明确地循环一下,看看p.subjects()的结果呢?使用普通的foreach循环并进行调试,查看其中的每个“s.Type”-也许这可以让您更深入地了解它,问题不在于集合中的项为null,而是与将对象“break”xml转换为break对象有关。无法将其中一个属性值转换为枚举类型。i、 我怀疑其中一个Break节点是否有一个名为“Page”的属性,该属性的值是否为空,或者该属性本身是否不存在!只要浏览一下xml,也许你就能明白这一点!
breaks == null? : False
private int manualCount(IEnumerable<OpenXmlElement> col)
{         
    int count = 0;
    if (col == null)
    {
        return count;
    }
    foreach (OpenXmlElement elem in col) 
    {
        count++;
    }
    return count;
}
b.Type != null && b.Type == BreakValues.Page
IEnumerable<Break> breaks = p.Descendants<Break>().Where(s => s != null && s.Type == BreakValues.Page);
var breaks = p.Descendants<Break>();
foreach(var item in breaks)
{
//debug every item and see what is coming out of item.Type
}