La propriété de type anonyme '<NomPropriété>' ne peut pas être utilisée dans la définition d'une expression lambda au sein de la même liste d'initialisation
Mise à jour : novembre 2007
Anonymous type property '<propertyname>' cannot be used in the definition of a lambda expression within the same initialization list
Les propriétés définies dans la liste d'initialisation d'un type anonyme ne peuvent pas faire partie d'une définition d'expression lambda dans la même liste. Par exemple, dans le code suivant, la propriété Num ne peut pas être incluse dans la définition de LambdaFun.
' Not valid.
'Dim anon = New With {.Num = 4, .LambdaFun = Function() .Num > 0}
ID d'erreur : BC36549
Pour corriger cette erreur
Envisagez de fractionner le type anonyme en deux parties :
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))
Notez que si vous déclarez anon1.Num en tant que propriété Key, sa valeur ne peut pas être modifiée.
Vous avez également la possibilité d'utiliser une instruction de fonction normale pour accéder à la propriété de type anonyme :
Function testNum(ByVal n As Integer) As Boolean Return n > 0 End Function Console.WriteLine(testNum(anon1.Num))
De même, vous pouvez utiliser une fonction lambda qui est définie à l'extérieur du type anonyme :
Dim lambdaFun1 = Function() anon1.Num > 0 Dim lambdaFun2 = Function(n As Integer) n > 0