Não é possível usar a propriedade de tipo anônimo '<propertyname>' na definição de uma expressão lambda na mesma lista de inicialização

As propriedades definidas na lista de inicialização de um tipo anônimo não podem fazer parte da definição de uma 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 do 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 propriedade Key, o 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
    

Confira também