标签:c vb-net ienumerable extension-methods 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< MyChild>句法?
解决方法:
你给出的链接中描述的.Value()不是扩展方法,它是一个属性,它特定于VB.net(就像任何其他轴属性:.,…,@ Attribute,(indexer))
标签:c,vb-net,ienumerable,extension-methods,xelement 来源: https://codeday.me/bug/20190630/1333318.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。