2014-07-20 42 views
-1

我做了一个简单的方法,它从特定节点返回一个字符串值(或者如果它不存在,则返回null)。为什么.Any()在这个特定的XElement扩展方法中不起作用?

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的一部分。我究竟做错了什么?是否有另一种方法来获得这种特定的扩展方法?

+0

你得到的错误是什么? – svick

+0

您是否添加了System.Linq命名空间? –

+0

为什么你需要这种扩展方法?听起来好像是'(string)element.Element(nodeName)'应该做的。或者'(string)element.Elements(nodeName).FirstOrDefault()'。 –

回答

0

你也需要让你的班级static

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

我知道。我在单独的扩展类中使用扩展方法。但是如果你尝试上面的代码,你会发现Visual Studio开始抱怨缺少.Any()和.First()方法。 – CameO73

1

解决方案变得非常简单......延斯克洛斯特走在了正确的轨道上。我忘记在我的扩展类中包含System.Linq命名空间。我第一次检查包括,并看到包括System.Xml.Linq,我认为这是我所需要的。但是现在我意识到我需要两个命名空间。

我还注意到,当您右键单击任何()时,Visual Studio 2012不会为这个特定情况提供“解析”菜单项。

相关问题