Przeczytaj w języku angielskim
" w definicji wyrażenia lambda na tej samej liście inicjowania - Visual Basic | Microsoft Learn" data-list-item-url="/dotnet/visual-basic/misc/bc36549" data-list-source="module" data-resource-type="" data-bi-name="add-to-list" aria-describedby="popover-content" aria-expanded="false" > Zapisz
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
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
jakoKey
wł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
Współpracuj z nami w serwisie GitHub
Źródło tej zawartości można znaleźć w witrynie GitHub, gdzie można również tworzyć i przeglądać problemy i żądania ściągnięcia. Więcej informacji znajdziesz w naszym przewodniku dla współtwórców.