Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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
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.NumjakoKeywłaściwość, nie można zmienić jej wartości.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))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