Tipp-Upload: VB.NET 0154: VB2008: Lambda-Ausdrücke
von Dario
Über den Tipp
Dieser Tippvorschlag ist noch unbewertet.
Der Vorschlag ist in den folgenden Kategorien zu finden:
- Sonstiges
Dem Tippvorschlag wurden folgende Schlüsselwörter zugeordnet:
lambda, delegate, predicate, extension, hidemodulename, attribute, <, >
Der Vorschlag wurde erstellt am: 29.11.2007 15:00.
Die letzte Aktualisierung erfolgte am 29.11.2007 15:00.
Beschreibung
Lambda-Ausdrücke sind eine Form von Delegaten.
Sie sind kleine Funktionen, die man direkt als Parameter übergeben kann. Mit ihnen kann man z.B. sehr einfach Konvertierungsoperationen gestalten.
Schwierigkeitsgrad |
Verwendete API-Aufrufe: |
Download: |
' Dieser Source stammt von http://www.activevb.de ' und kann frei verwendet werden. Für eventuelle Schäden ' wird nicht gehaftet. ' Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum. ' Ansonsten viel Spaß und Erfolg mit diesem Source! ' ' Beachten Sie, das vom Designer generierter Code hier ausgeblendet wird. ' In den Zip-Dateien ist er jedoch zu finden. ' ------------- Anfang Projektgruppe Lambdas.sln ------------- ' ------------ Anfang Projektdatei Lambdas.vbproj ------------ ' ----------------- Anfang Datei Module1.vb ----------------- Option Infer On Option Strict On Option Explicit On Imports System Imports System.Runtime.CompilerServices ' Die allgemeine Syntax für einen Lambda-Ausdruck lautet: ' Function([<ByVal|ByRef> Parameter [As <Typ>], ...]) Ergebnisausdruck ' Modul für die Erweiterung von List(Of Integer) <HideModuleName()> Module ExtendList ' Erweiterungsfunktion zum Füllen einer Liste mit Zahlen innerhalb gegebener Grenzen, ' die ein Prädikat erfüllen <Extension()> Public Sub AddNumberRange(ByVal lhs As List(Of Integer), ByVal Minimum As _ Integer, ByVal Maximum As Integer, Optional ByVal Pred As Predicate(Of Integer) = _ Nothing, Optional ByVal StepDst As Integer = 1) For i As Integer = Minimum To Maximum Step StepDst If Pred Is Nothing OrElse (Pred IsNot Nothing And Pred(i) = True) Then lhs.Add(i) End If Next End Sub End Module Module Module1 Sub Main() Dim List As New Generic.List(Of Integer) ' VB9 ' Delegatenvariable mit dem Lambda-Ausdruck belegen Dim MyPredicate2008 As Predicate(Of Integer) = Function(i As Integer) (i Mod 11 = 0) ' VB8 ' Delegatenvariable mit Funktionszeiger belegen Dim MyPredicate2005 As Predicate(Of Integer) = AddressOf Predicate2005 ' Nur 11er-Viefache von 1 bis 100 aufnehmen List.AddNumberRange(1, 100, MyPredicate2008) ' Alle Werte kleiner als 40 und größer als 80 löschen List.RemoveAll(MyPredicate2005) ' Mittels Lamba-Ausdruck Konvertierung durchführen Dim StringList As List(Of String) = List.ConvertAll(Function(i As Integer) _ String.Concat(i)) ' Alle Werte in der Liste ausgeben Console.WriteLine("Folgende Elemente sind in der Liste enthalten") StringList.ForEach(AddressOf Console.WriteLine) Console.ReadKey() End Sub Function Predicate2005(ByVal i As Integer) As Boolean Return i < 40 Or i > 80 End Function End Module ' ------------------ Ende Datei Module1.vb ------------------ ' ------------- Ende Projektdatei Lambdas.vbproj ------------- ' -------------- Ende Projektgruppe Lambdas.sln --------------
Diskussion
Diese Funktion ermöglicht es, Fragen, die die Veröffentlichung des Tipps betreffen, zu klären, oder Anregungen und Verbesserungsvorschläge einzubringen. Nach der Veröffentlichung des Tipps werden diese Beiträge nicht weiter verlinkt. Allgemeine Fragen zum Inhalt sollten daher hier nicht geklärt werden.
Um eine Diskussion eröffnen zu können, müssen sie angemeldet sein.