gpt4 book ai didi

c# - IEnumerable.Value() 扩展方法在 VB.Net 中可用但在 C# 中不可用?

转载 作者:行者123 更新时间:2023-11-30 12:13:50 25 4
gpt4 key购买 nike

在 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 , (索引器))

关于c# - IEnumerable<XElement>.Value() 扩展方法在 VB.Net 中可用但在 C# 中不可用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10903830/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com