Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Het gebruik van de iteratievariabele in een lambda-expressie kan onverwachte resultaten hebben. Maak in plaats daarvan een lokale variabele in de lus en wijs deze de waarde van de iteratievariabele toe.
Deze waarschuwing wordt weergegeven wanneer u een lusiteratievariabele gebruikt in een lambda-expressie die in de lus wordt gedeclareerd. In het volgende voorbeeld wordt de waarschuwing bijvoorbeeld weergegeven.
For i As Integer = 1 To 10
' The warning is given for the use of i.
Dim exampleFunc As Func(Of Integer) = Function() i
Next
In het volgende voorbeeld ziet u de onverwachte resultaten die kunnen optreden.
Module Module1
Sub Main()
Dim array1 As Func(Of Integer)() = New Func(Of Integer)(4) {}
For i As Integer = 0 To 4
array1(i) = Function() i
Next
For Each funcElement In array1
System.Console.WriteLine(funcElement())
Next
End Sub
End Module
De For lus maakt een matrix van lambda-expressies, die elk de waarde van de lusiteratievariabele iretourneren. Wanneer de lambda-expressies in de For Each lus worden geƫvalueerd, kunt u verwachten dat 0, 1, 2, 3 en 4 worden weergegeven, de opeenvolgende waarden van i de lus For . In plaats daarvan ziet u de uiteindelijke waarde van i vijf keer weergegeven:
5
5
5
5
5
Dit bericht is standaard een waarschuwing. Zie Waarschuwingen configureren in Visual Basic voor meer informatie over het verbergen van waarschuwingen of het behandelen van waarschuwingen als fouten.
Fout-id: BC42324
Deze fout corrigeren
- Wijs de waarde van de iteratievariabele toe aan een lokale variabele en gebruik de lokale variabele in de lambda-expressie.
Module Module1
Sub Main()
Dim array1 As Func(Of Integer)() = New Func(Of Integer)(4) {}
For i As Integer = 0 To 4
Dim j = i
array1(i) = Function() j
Next
For Each funcElement In array1
System.Console.WriteLine(funcElement())
Next
End Sub
End Module