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

  1. 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 uma Key propriedade, seu valor não poderá ser alterado.Note that if you declare anon1.Num as a Key property, its value cannot be changed.

  2. 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))
    
  3. 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
    

Consulte tambémSee also