Possible Duplicate:
Yield In VB.NET
In C#, when writing a function that returns an IEnumerble<>
, you can use yield return
to return a single item of the enumeration and yield break;
to signify no remaining items. What is the VB.NET syntax for doing the same thing?
An example from the NerdDinner code:
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;
}
This convert C# to VB.NET tool gives a "YieldStatement is unsupported" error.
VB.NET IEnumerable Examples Use the IEnumerable Interface with arrays, Lists, and For-Each loops. IEnumerable. An IEnumerable collection contains elements. We use the For-Each loop in VB.NET to loop over these elements. Lists and arrays implement this interface. Interface benefits. We can use Extensions, such as ToList, on an IEnumerable type.
VB.NET does not have the "yield" keyword. So, there are a few solutions (none of which are really clean) to get around this. You could use a return statement to return the value if you are looping through and would like to break an enumerator and return a single value.
Since IEnumerable (Of T) is inherited from IEnumerable interface, you will have to implement two similar Function s that are almost identical in names, but they are differ in the return type. Which function shall be implemented?
This newer answer shows use of VB's Yield value (inside an Iterator Function declaration), which was added years after this question was asked. There is none. Period. Unless you are going to write your own state machine, there is no quick fix for this. See the blog post VB.NET's "yield return" .
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
The new Async CTP includes support for Yield
in VB.NET.
See Iterators in Visual Basic for information on usage.
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 a Static
member of a method.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With