gpt4 book ai didi

c# - Foreach 迭代 Null

转载 作者:行者123 更新时间:2023-11-30 14:34:56 25 4
gpt4 key购买 nike

我正在使用 LINQ 过滤从 Sharepoint WSS3 的 listService.GetListItems() 返回的 XmlNode方法。

这是它返回的 XML: http://pastebin.com/mqHcserY

我观察到最后一行与其他行不同,它不包含以下属性。

ows_ContentType
ows_LinkFilenameNoMenu
ows_LinkFilename
ows_BaseName
ows__EditMenuTableStart

考虑到这一点,我使用 LINQ 过滤结果:

XmlNode items = listService.GetListItems(listName, string.Empty, query, viewFields, string.Empty, queryOptions, g.ToString());

// Namespace for z: prefix
XNamespace xns = "#RowsetSchema";

XElement root;
using (XmlReader xr = new XmlNodeReader(items)) { root = XElement.Load(xr); }

// This query returns XElements that are Folder types
IEnumerable<XElement> result = from child in root.Descendants(xns + "row")
where child.Attribute("ows_ContentType").Value != null && child.Attribute("ows_ContentType").Value == "Folder"
select child;

foreach (XElement xml in result)
{
//Exception when attempts to loop final XElement
}

然而,当我遍历结果时,我得到一个 NullReferenceException .在 Foreach 循环中,它会愉快地遍历每个对象,直到到达最后一个对象,然后它会抛出异常。

最后一个对象与其他行不同(我通过消除过程知道这一点,我看到每隔一行循环过去)并且应该从我的结果中过滤掉,因为它没有“ows_ContentType "属性。

我将 LINQ 更改为 where child.Attribute("ows_ContentType").Value != null && child.Attribute("ows_ContentType").Value == "Folder"试图过滤任何包含空值的内容,但我得到了相同的结果。我看过一些 samples而且我似乎有正确的语法。

有人可以解释是什么导致最后一个 XElement 返回 null 吗?我真的不明白为什么它会向 <IEnumerable<XElement> result 添加一个空实例收藏。

最佳答案

调用不存在属性的值将导致空引用,因为该节点根本不存在。

child.Attribute("ows_ContentType").Value

通过调用缺失元素的值抛出异常。

改用这个:

child.Attribute("ows_ContentType") != null

实现:

IEnumerable<XElement> result = from child in root.Descendants(xns + "row")
where child.Attribute("ows_ContentType") != null && child.Attribute("ows_ContentType").Value == "Folder"
select child;

关于c# - Foreach 迭代 Null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13068621/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com