Przeczytaj w języku angielskim

Udostępnij za pośrednictwem


Nie można użyć właściwości typu anonimowego "<propertyname>" w definicji wyrażenia lambda na tej samej liście inicjowania

Właściwości zdefiniowane na liście inicjowania typu anonimowego nie mogą być częścią definicji wyrażenia lambda na tej samej liście. Na przykład w poniższym kodzie nie można uwzględnić właściwości Num w definicji .LambdaFun

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

Identyfikator błędu: BC36549

Aby poprawić ten błąd

  1. Rozważ podzielenie typu anonimowego na dwie części:

    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))
    

    Należy pamiętać, że jeśli deklarujesz anon1.Num jako Key właściwość, nie można zmienić jej wartości.

  2. Alternatywą jest użycie regularnej instrukcji funkcji w celu uzyskania dostępu do właściwości typu anonimowego:

    Function testNum(ByVal n As Integer) As Boolean
        Return n > 0
    End Function
    Console.WriteLine(testNum(anon1.Num))
    
  3. Podobnie można użyć funkcji lambda zdefiniowanej poza typem anonimowym:

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

Zobacz też