Partager via


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

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

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

Voir aussi

Concepts

Expressions lambda

Types anonymes