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çãoAnonymous type property '<propertyname>' cannot be used in the definition of a lambda expression within the same initialization list
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.Properties defined in the initialization list of an anonymous type cannot be part of a lambda expression definition in the same list. Por exemplo, no código a seguir, a propriedade Num
não pode ser incluída na definição de LambdaFun
.For example, in the following code, property Num
cannot be included in the definition of LambdaFun
.
' Not valid.
'Dim anon = New With {.Num = 4, .LambdaFun = Function() .Num > 0}
ID do erro: BC36549Error ID: BC36549
Para corrigir este erroTo correct this error
Considere dividir o tipo anônimo em duas partes:Consider splitting the anonymous type into two parts:
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 umaKey
propriedade, seu valor não poderá ser alterado.Note that if you declareanon1.Num
as aKey
property, its value cannot be changed.Uma alternativa é usar uma instrução de função regular para acessar a propriedade de tipo anônimo:An alternative is to use a regular function statement to access the anonymous type property:
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 que é definida fora do tipo anônimo:Similarly, you can use a lambda function that is defined outside the anonymous type:
Dim lambdaFun1 = Function() anon1.Num > 0 Dim lambdaFun2 = Function(n As Integer) n > 0