Impossibile utilizzare la proprietà di tipo anonimo "<nomeproprietà>" nella definizione di un'espressione lambda nello stesso elenco di inizializzazione

Aggiornamento: novembre 2007

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

Le proprietà definite nell'elenco di inizializzazione di tipo anonimo non possono far parte di una definizione di un'espressione lambda nello stesso elenco. Ad esempio, nel codice seguente, la proprietà Num non può essere inclusa nella definizione dell'oggetto LambdaFun.

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

ID errore: BC36549

Per correggere l'errore

  1. Si consideri di suddividere il tipo anonimo in due parti:

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

    Notare che se si dichiara l'oggetto anon1.Num come una proprietà Key, non è possibile modificarne il valore.

  2. In alternativa è possibile utilizzare un'istruzione Function normale per accedere alla proprietà di tipo anonimo:

    Function testNum(ByVal n As Integer) As Boolean
        Return n > 0
    End Function
    Console.WriteLine(testNum(anon1.Num))
    
  3. Allo stesso modo, è possibile utilizzare una funzione lambda definita al di fuori del tipo anonimo:

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

Vedere anche

Concetti

Espressioni lambda

Tipi anonimi