Impossibile usare la proprietà di tipo anonimo '<propertyname>' nella definizione di un'espressione lambda nello stesso elenco di inizializzazione

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. È consigliabile 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 usare 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 usare una funzione lambda definita al di fuori del tipo anonimo:

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

Vedi anche