【发布时间】:2009-12-04 20:45:06
【问题描述】:
这可能是一个简单的修复(嗯,它可能是),但由于某种原因我无法弄清楚。
所以,我有一些看起来像这样的 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: Object reference not set to an instance of an object。
检查和查看我的 linq 查询中是否确实存在节点的最佳方法是什么?还是我需要以其他方式检查它是否存在?
【问题讨论】:
-
看来是我对 FirstOrDefault() 的使用搞砸了。不过感谢您的回答 - 都非常有帮助!
-
你能解决这个问题吗?
-
@trx - 我在发布此问题时遇到的问题是在我的
FirstOrDefault()查询中调用Value。由于查询返回 null,因此对其调用 Value 会导致错误。所以要测试节点是否存在,我应该写:var name = (from b in xml.Descendants("c") select b.Attribute("name")).FirstOrDefault();并检查name看它是否为空。
标签: c# xml linq linq-to-xml