为什么.Any()在这个特定的XElement扩展方法中不起作用?

时间:2014-07-20 11:41:32

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

我创建了一个从特定节点返回字符串值的简单方法(如果它不存在则返回null)。

private static string getValueIfExist(XElement element, string nodeName)
{    
  return element.Elements(nodeName).Any() ? element.Elements(nodeName).First().Value : null;
}

现在我想将该方法用作XElement的扩展方法:

public static string GetValueIfExist(this XElement element, string nodeName)
{
  return element.Elements(nodeName).Any() ? element.Elements(nodeName).First().Value : null;
}

但它没有编译。由于某种原因,Any()和First()都不再被视为IEnumerable的一部分。我究竟做错了什么?有没有其他方法来获得这种特定的扩展方法?

2 个答案:

答案 0 :(得分:1)

解决方案结果非常简单...... Jens Kloster走在正确的轨道上。我忘了在我的Extensions类中包含System.Linq命名空间。我第一次检查包含并看到System.Xml.Linq包含在内,我认为这就是我所需要的。但现在我意识到我需要两个命名空间。

我还注意到Visual Studio 2012没有提出一个" Resolve"右键单击Any()时,此特定情况的菜单项。

答案 1 :(得分:0)

您还需要制作课程static

public static class Extensions
{
   public static string GetValueIfExist(this XElement element, string nodeName)
   {
      ...
   }
}