Die Community zu .NET und Classic VB.
Menü

Tipp-Upload: VB.NET 0154: VB2008: Lambda-Ausdrücke

 von 

Ü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.

Zurück zur Übersicht

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

Schwierigkeitsgrad 2

Verwendete API-Aufrufe:

Download:

Download des Beispielprojektes [8,36 KB]

' 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.