Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Az iterációs változó lambda kifejezésben való használata váratlan eredményeket eredményezhet. Ehelyett hozzon létre egy helyi változót a hurokban, és rendelje hozzá az iterációs változó értékét.
Ez a figyelmeztetés akkor jelenik meg, ha egy ciklus iterációs változót használ a cikluson belül deklarált lambda kifejezésben. Az alábbi példában például megjelenik a figyelmeztetés.
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
Az alábbi példa az esetlegesen előforduló váratlan eredményeket mutatja be.
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
A For hurok lambdakifejezések tömböt hoz létre, amelyek mindegyike a hurok iterációs változójának iértékét adja vissza. Amikor a lambda kifejezések kiértékelése a For Each hurokban történik, a ciklus egymást követő értékeinek 0, 1, 2, 3 és 4 értékére iFor számíthat. Ehelyett az ötször megjelenő végső érték i jelenik meg:
5
5
5
5
5
Ez az üzenet alapértelmezés szerint figyelmeztetés. A figyelmeztetések elrejtésével vagy a figyelmeztetések hibákként való kezelésével kapcsolatos további információkért lásd: Figyelmeztetések konfigurálása a Visual Basicben.
Hibaazonosító: BC42324
A hiba kijavítása
- Rendelje hozzá az iterációs változó értékét egy helyi változóhoz, és használja a helyi változót a lambda kifejezésben.
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