Anonim tür özelliği '<propertyname>' aynı başlatma listesindeki lambda ifadesinin tanımında kullanılamaz

Anonim bir türün başlatma listesinde tanımlanan özellikler, aynı listedeki lambda ifade tanımının parçası olamaz. Örneğin, aşağıdaki kodda özelliği Num tanımına LambdaFuneklenemez.

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

Hata Kimliği: BC36549

Bu hatayı düzeltmek için

  1. Anonim türü iki bölüme bölmeyi göz önünde bulundurun:

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

    Özellik olarak Key bildirirseniz anon1.Num değerinin değiştirilemeyeceğini unutmayın.

  2. Alternatif olarak anonim tür özelliğine erişmek için normal bir işlev deyimi kullanabilirsiniz:

    Function testNum(ByVal n As Integer) As Boolean
        Return n > 0
    End Function
    Console.WriteLine(testNum(anon1.Num))
    
  3. Benzer şekilde, anonim türün dışında tanımlanan bir lambda işlevi kullanabilirsiniz:

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

Ayrıca bkz.