No se puede usar la propiedad de tipo anónimo '<propertyname>' en la definición de una expresión lambda en la misma lista de inicialización

Las propiedades definidas en la lista de inicialización de un tipo anónimo no pueden formar parte de una definición de la expresión lambda en la misma lista. Por ejemplo, en el código siguiente, la propiedad Num no puede incluirse en la definición de LambdaFun.

' Not valid.
'Dim anon = New With {.Num = 4, .LambdaFun = Function() .Num > 0}

Identificador de error: BC36549

Para corregir este error

  1. Considere la posibilidad de dividir el tipo anónimo en dos 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))
    

    Tenga en cuenta que si declara anon1.Num como una propiedad Key , no se puede cambiar su valor.

  2. Como alternativa,puede usar una instrucción de función normal para tener acceso a la propiedad de tipo anónimo:

    Function testNum(ByVal n As Integer) As Boolean
        Return n > 0
    End Function
    Console.WriteLine(testNum(anon1.Num))
    
  3. De forma similar, puede usar una función lambda definida fuera del tipo anónimo:

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

Consulte también