Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Att använda iterationsvariabeln i ett lambda-uttryck kan ha oväntade resultat. Skapa i stället en lokal variabel i loopen och tilldela den värdet för iterationsvariabeln.
Den här varningen visas när du använder en loop-iterationsvariabel i ett lambda-uttryck som deklareras i loopen. I följande exempel visas till exempel varningen.
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
I följande exempel visas oväntade resultat som kan uppstå.
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
Loopen For skapar en matris med lambda-uttryck, som var och en returnerar värdet för loop-iterationsvariabeln i. När lambda-uttrycken utvärderas i loopen For Each kan du förvänta dig att 0, 1, 2, 3 och 4 visas, de efterföljande värdena i för i -loopen For . I stället visas det slutliga värdet i för fem gånger:
5
5
5
5
5
Som standard är det här meddelandet en varning. Mer information om hur du döljer varningar eller behandlar varningar som fel finns i Konfigurera varningar i Visual Basic.
Fel-ID: BC42324
Så här åtgärdar du det här felet
- Tilldela värdet för iterationsvariabeln till en lokal variabel och använd den lokala variabeln i lambda-uttrycket.
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