IEnumerable <xelement> .Value()扩展方法在VB.Net中可用而不是C#?</xelement>

时间:2012-06-05 19:42:10

标签: c# vb.net extension-methods ienumerable xelement

在VB.Net中,您可以轻松获取XElement的第一个子元素的文本值,如下所示:

Dim sChildValue = xeParent.<MyChild>.Value()

当然,C#不支持该语法,但它产生与Elements()方法相同的IEnumerable(Of XElement)结果。所以我们可以这样重写上面的内容:

Dim sChildValue = xeParent.Elements("MyChild").Value()

这个Value()扩展方法很方便,因为您经常使用小型XML文档而只需要匹配的第一个节点。 (有一件事令我烦恼,因为找不到指定的元素,如果IEnumerable列表为空,它似乎返回Nothing / null。为了解决这个问题,我创建了自己的ValueOrBlank()方法返回一个空在那种情况下的字符串。)

我的问题是我不能在C#中做同样的事情:

var sChildValue = xeParent.Elements("MyChild").Value(); // won't compile, can't find Value() method

我检查了我的引用/导入,它们匹配同一调用工作的VB.Net项目。幸运的是,我能够使用我的自定义ValueOrBlank()扩展方法来完成同样的事情。但我很好奇我的C#项目中缺少什么。我尝试右键单击Visual Studio中的Value()方法调用,然后单击“转到定义”以查看对象浏览器是否可以告诉我保留扩展方法的位置,但它只显示System.String类。这是否意味着这是编译器本身支持的那些偷偷摸摸的VB.Net特性之一,例如XML Axis&lt; MyChild&gt;语法?

2 个答案:

答案 0 :(得分:3)

你给出的链接中描述的

.Value()不是扩展方法,它是一个属性,它特定于VB.net(就像任何其他轴属性:。,...,@ Attribute,(indexer))< / p>

答案 1 :(得分:0)

您需要获取单个元素:

var value = parent.Element("MyChild").Value;
相关问题