如何使用c#中的lambda表达式检测元素是否存在?

时间:2011-10-06 01:33:00

标签: c# xml linq lambda linq-to-xml

我一直在使用try / catch语句来检查在解析它时是否存在元素。显然,这不是最好的方法。我一直在使用LINQ(lambda表达式)进行大部分解析,但我只是不知道如何检测元素是否存在。

我发现一些解决方案的一个大问题是,它们使用的代码比使用try / catch块多3-4倍,这种方法会失败。

我认为代码看起来像这样:

if(document.Element("myElement").Exists())
{
   var myValue = document.Element("myElement").Value;
}

我确实发现了这个link,但在我的情况下循环是不必要的,因为我可以保证它只会出现一次。此外,必须创建一个似乎不必要的虚拟元素。看起来不是检查的最佳方式(或好方法)。有什么想法吗?

3 个答案:

答案 0 :(得分:4)

XElement e = document.Element("myElement");
if (e != null)
{
    var myValue = e.Value; 
}

http://msdn.microsoft.com/en-us/library/system.xml.linq.xcontainer.element.aspx

“获取具有指定XName的第一个(按文档顺序)子元素。”

“如果没有指定名称的元素,则返回Nothing。”

答案 1 :(得分:0)

Any()是Linq命令。

Assert.IsFalse( new [] { 1, 2, 3, 4 }.Any( i => i == 5 ));

答案 2 :(得分:-1)

Any()是检查元素是否存在的最简单方法。

如果您必须确保该元素是唯一的,那么您必须执行.Count() == 1之类的操作。或者,您可以实现自己的扩展方法,但这只是.Count == 1的包装器。