A propriedade de tipo anônimo '<propertyname>' não pode ser usada na definição de uma expressão lambda dentro da mesma lista de inicialização

As propriedades definidas na lista de inicialização de um tipo anônimo não podem fazer parte de uma definição de expressão lambda na mesma lista. Por exemplo, no código a seguir, a propriedade Num não pode ser incluída na definição de LambdaFun.

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

ID de erro: BC36549

Para corrigir este erro

  1. Considere dividir o tipo anônimo em duas partes:

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

    Observe que, se você declarar anon1.Num como uma Key propriedade, seu valor não poderá ser alterado.

  2. Uma alternativa é usar uma instrução de função regular para acessar a propriedade de tipo anônimo:

    Function testNum(ByVal n As Integer) As Boolean
        Return n > 0
    End Function
    Console.WriteLine(testNum(anon1.Num))
    
  3. Da mesma forma, você pode usar uma função lambda definida fora do tipo anônimo:

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

Consulte também