gpt4 book ai didi

c# - LINQ 到 XML : handling nodes that do not exist?

转载 作者:数据小太阳 更新时间:2023-10-29 02:16:54 24 4
gpt4 key购买 nike

这可能是一个简单的修复(好吧,它可能是)但出于某种原因我就是想不通。

所以,我有一些看起来像这样的 xml:

XElement xml = XElement.Parse (
@"<Alphabet>
<a name="A" />
<b name="B" />
<d name="D" />
<e name="E" />
</Alphabet>");

所以在我的代码后面,我引​​用了一个可能存在也可能不存在的节点,如下所示:

var name = (from b in xml.Descendants("c")
select b.Attribute("name")).FirstOrDefault().Value;

但是当它不存在时,它不会返回 null 或 "",而是抛出 NullReferenceException: 对象引用未设置到对象的实例。

检查和查看我的 linq 查询中是否实际存在节点的最佳方法是什么?或者我是否需要通过其他方式检查它是否存在?

最佳答案

好吧,您正在选择属性 - 所以只需使用:

var nameAttribute = xml.Descendants("c").Select(b => b.Attribute("name"))
.FirstOrDefault();
if (nameAttribute != null)
{
string name = nameAttribute.Value;
}
else
{
// Whatever...
}

(我已将其从查询表达式更改为点符号,因为查询很简单 - 查询表达式语法实际上并没有给您带来任何好处。)

此解决方案的一个问题是:它不区分存在“c”元素但不具有“name”属性,以及首先不存在“c”元素。您需要能够区分吗?

关于c# - LINQ 到 XML : handling nodes that do not exist?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1849554/

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