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