Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
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
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.Numcomo umaKeypropriedade, seu valor não poderá ser alterado.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))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