In Visual Basic .NET werden anonyme Methoden durch Lambda-Ausdrücke (Function oder Sub) realisiert. Sie ermöglichen die Definition kleiner Code-Blöcke, ohne eine separate benannte Prozedur zu erstellen. Beispiel für deren Verwendung:
Dim squared = Function(x As Integer) x * x Console.WriteLine(squared(5)) ' Ausgabe: 25 Dim numbers = {1, 2, 3, 4} Dim evens = numbers.Where(Function(n) n Mod 2 = 0) For Each n In evens Console.WriteLine(n) Next
Vorteile:
Einschränkungen:
Frage: "Kann man einen Lambda-Ausdruck zur Deklaration einer Prozedur mit dem GoTo-Befehl verwenden? Warum?"
Richtige Antwort: Nein, Lambda-Ausdrücke in VB.NET erlauben nicht die Verwendung von Steueranweisungen wie GoTo, GoSub oder Label. Dies liegt an den Besonderheiten der Implementierung anonymer Methoden. Der Versuch, GoTo zu verwenden, führt zu einem Kompilierungsfehler.
Beispielcode (führt zu einem Fehler):
Dim broken = Sub() GoTo Label1 Label1: End Sub
Geschichte
In einem Projekt zur Datenverarbeitung versuchten sie, Lambda-Ausdrücke für komplexe Validierungen mit mehreren Ausstiegspunkten über GoTo zu verwenden. Bei der Migration von normalen Methoden zu Lambda-Code traten Kompilierungsfehler auf, wodurch sie die Architektur der Funktionen schnell ändern mussten.
Geschichte
Für asynchrone Aufrufe verwendeten sie anonyme Methoden. Innerhalb der Lambda verwiesen sie versehentlich auf Variablen, die sich in einem Loop änderten. Dies führte zu unerwarteten Ergebnissen, da die Lambda die Variable nach Referenz und nicht nach Wert "merkte" — die Folge waren rätselhafte Bugs in den Berichten.
Geschichte
In einem Projekt wandelten sie anonyme Methoden direkt in Delegaten inkompatibler Typen um (z.B. Sub statt Function). Der Compiler gab keinen klaren Fehler aus, aber die Ereignis-Handler wurden nicht ausgeführt. Dies wurde nur bei manuellen Tests entdeckt, was zu Verzögerungen bei der Veröffentlichung führte.