Die anonyme Typeigenschaft "<Eigenschaftenname>" kann nicht in der Definition eines Lambda-Ausdrucks innerhalb derselben Initialisierungsliste verwendet werden.

Aktualisiert: November 2007

Anonymous type property '<propertyname>' cannot be used in the definition of a lambda expression within the same initialization list

Eigenschaften, die in der Initialisierungsliste eines anonymen Typs definiert sind, können kein Bestandteil der Definition eines Lambda-Ausdrucks in derselben Liste sein. Im folgenden Code kann beispielsweise die Num-Eigenschaft nicht in der Definition von LambdaFun enthalten sein.

' Not valid.
'Dim anon = New With {.Num = 4, .LambdaFun = Function() .Num > 0}

Fehler-ID: BC36549

So beheben Sie diesen Fehler

  1. Es empfiehlt sich, den anonymen Typ in zwei Bereiche zu unterteilen:

    Dim anon1 = New With {.Num = 4}
    Dim anon2 = New With {.LambdaFun = Function() anon1.Num > 0}
    ' - or -
    Dim anon3 = New With {.lambdaFun = Function(n As Integer) n > 0}
    Console.WriteLine((anon2.LambdaFun)())
    Console.WriteLine(anon3.lambdaFun(anon1.Num))
    anon1.Num = -5
    Console.WriteLine((anon2.LambdaFun)())
    Console.WriteLine(anon3.lambdaFun(anon1.Num))
    

    Beachten Sie Folgendes: Wenn Sie anon1.Num als Key-Eigenschaft deklarieren, kann der zugehörige Wert nicht geändert werden.

  2. Sie können jedoch auch mit einer regulären function-Anweisung auf die Eigenschaft des anonymen Typs zugreifen:

    Function testNum(ByVal n As Integer) As Boolean
        Return n > 0
    End Function
    Console.WriteLine(testNum(anon1.Num))
    
  3. Ebenso können Sie eine Lambda-Funktion verwenden, die außerhalb des anonymen Typs definiert ist:

    Dim lambdaFun1 = Function() anon1.Num > 0
    Dim lambdaFun2 = Function(n As Integer) n > 0
    

Siehe auch

Konzepte

Lambda-Ausdrücke

Anonyme Typen