我可以在 VB.NET 中实现 IEnumerable 函数的收益返回吗?
可能的重复:
VB.NET 中的产量
在 C# 中,当编写返回 IEnumerble
IEnumerble< 的函数时, >,您可以使用
yield return
返回枚举的单个项目,并使用 yield break;
表示没有剩余项目。执行相同操作的 VB.NET 语法是什么?
NerdDinner 代码中的示例:
public IEnumerable<RuleViolation> GetRuleViolations() {
if (String.IsNullOrEmpty(Title))
yield return new RuleViolation("Title required","Title");
if (String.IsNullOrEmpty(Description))
yield return new RuleViolation("Description required","Description");
if (String.IsNullOrEmpty(HostedBy))
yield return new RuleViolation("HostedBy required", "HostedBy");
if (String.IsNullOrEmpty(Address))
yield return new RuleViolation("Address required", "Address");
if (String.IsNullOrEmpty(Country))
yield return new RuleViolation("Country required", "Country");
if (String.IsNullOrEmpty(ContactPhone))
yield return new RuleViolation("Phone# required", "ContactPhone");
if (!PhoneValidator.IsValidNumber(ContactPhone, Country))
yield return new RuleViolation("Phone# does not match country", "ContactPhone");
yield break;
}
此 将 C# 转换为 VB.NET 工具 给出“YieldStatement 不受支持”错误。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
目前,从语言语法层面来看,VB.Net 中还没有与 C# 的yield return 等效的方法。
然而,Bill McCarthy 最近在 MSDN 杂志上发表了一篇关于如何在 VB.Net 9.0 中实现类似模式的文章
There is currently no equivalent to C#'s yield return in VB.Net from a language syntax level.
However there was a recent write up in MSDN magazine by Bill McCarthy on how to implement a similar pattern in VB.Net 9.0
新的异步 CTP 包括对
Yield
的支持在 VB.NET 中。有关使用信息,请参阅 Visual Basic 中的迭代器。
The new Async CTP includes support for
Yield
in VB.NET.See Iterators in Visual Basic for information on usage.
请在此处查看我的答案:
总结一下:
VB.Net 没有yield,但 C# 通过将代码转换为幕后的状态机来实现yield。 VB.Net 的
Static
关键字还允许您在函数中存储状态,因此理论上您应该能够实现一个类,该类允许您在用作Static
时编写类似的代码code> 方法的成员。See my answers here:
To summarize:
VB.Net does not have yield, but C# implements yield by converting your code to a state machine behind that scenes. VB.Net's
Static
keyword also allows you to store state within a function, so in theory you should be able to implement a class that allows you to write similar code when used as aStatic
member of a method.VB.NET 中没有收益回报:(
只需创建一个列表并将其返回即可。
No yield return in VB.NET :(
Just create a list and return it.
在幕后,编译器创建一个枚举器类来完成这项工作。由于 VB.NET 没有实现此模式,因此您必须创建自己的 IEnumerator(Of T) 实现
Behind the scenes, the compiler creates an enumerator class to do the work. Since VB.NET does not implement this pattern, you have to create your own implementation of IEnumerator(Of T)
下面给出输出: 2, 4, 8, 16, 32
在 VB 中,
在 C# 中
Below gives output: 2, 4, 8, 16, 32
In VB,
In C#