加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-17 07:13:26 所属栏目:百科 来源:网络整理
导读:在VB.Net中,您可以轻松获取XElement的第一个子元素的文本值,如下所示: Dim sChildValue = xeParent.MyChild.Value() 当然,C#不支持该语法,但它产生与Elements()方法相同的IEnumerable(Of XElement)结果.所以我们可以像这样重写上面的内容: Dim sChildValue
在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< MyChild>句法?

解决方法

你给出的链接中描述的.Value()不是扩展方法,它是一个属性,它特定于VB.net(就像任何其他轴属性:.,…,@ Attribute,(indexer))

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读