Partilhar via


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

Propriedades definidas na lista de inicialização de um tipo anônimo não podem ser 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ído 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 separação 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 sistema autônomo um Key propriedade, seu valor não pode ser alterado.

  2. Uma alternativa é usar uma demonstrativo 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 que está definida fora do tipo anônimo:

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

Consulte também

Conceitos

Expressões Lambda

Tipos anônimos