Mögliche Duplizieren:
Yield In VB.NETKann ich die Rendite für IEnumerable-Funktionen in VB.NET implementieren?
In C#, wenn eine Funktion zu schreiben, die eine IEnumerble<>
zurückgibt, können Sie yield return
verwenden, um ein einzelnes Element der Aufzählung zurückzukehren und yield break;
kein verbleib zu bedeuten Artikel. Was ist die VB.NET-Syntax für die gleiche Sache?
Ein Beispiel aus dem 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;
}
Diese convert C# to VB.NET tool gibt ein Fehler "YieldStatement nicht unterstützt wird". Jedoch
Beachten Sie, dass das Nachgeben nicht zurückkehrt, zumindest nicht in dem Sinne, dass die meisten Menschen die Rückkehr bedeuten (die Art und Weise, wie es unter der Haube ausgeführt wird). Außerdem brauchen Sie dort keine Rendite.Außerdem sollten Sie darüber nachdenken, diesen Code dahingehend zu transformieren, dass eine Enumeration von RuleViolation-Objekten in eine Enumeration von Func Delegaten resultiert. –
yfeldblum
Die Verwendung von Yield erinnert mich an die Piping-Funktion, in der der Calling-Code mit der Iteration beginnen kann, bevor * die Funktion, die das Imenumerable zurückgibt, beendet ist. Sehr cool! –
Das ist ein schreckliches Beispiel, weil Sie offensichtlich nichts für so etwas brauchen: Was ist der Vorteil, die Regelverstöße träge zu bestimmen? Stopf sie alle in eine Liste und sei damit fertig. Das ist nicht zu sagen, YEILD ist nicht nützlich, aber das ist nur ein schlechtes Beispiel – piers7