Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Aggiornamento: novembre 2007
Messaggio di errore
L'utilizzo della variabile di iterazione in un'espressione lambda può produrre risultati imprevisti. Creare una variabile locale all'interno del ciclo e assegnarvi il valore della variabile di iterazione.
Using the iteration variable in a lambda expression may have unexpected results. Instead, create a local variable within the loop and assign it the value of the iteration variable.
Questo avviso viene visualizzato quando si utilizza una variabile di iterazione del cliclo in un'espressione lambda dichiarata all'interno del ciclo. Nell'esempio seguente, ad esempio, viene generato questo avviso.
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
Nell'esempio seguente vengono illustrati i risultati imprevisti che potrebbero verificarsi.
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
Il ciclo For crea una matrice di espressioni lambda, ognuna delle quali restituisce il valore della variabile di iterazione del ciclo i. Quando le espressioni lambda vengono valutate nel ciclo For Each, dovrebbero venire visualizzati 0, 1, 2, 3 e 4, i valori successivi di i nel ciclo For. Viene invece visualizzato il valore finale di i per cinque volte:
5
5
5
5
5
Per impostazione predefinita, si tratta di un messaggio di avviso. Per ulteriori informazioni su come nascondere gli avvisi o considerarli come errori, vedere Configurazione degli avvisi in Visual Basic.
ID errore: BC42324
Per correggere l'errore
Assegnare il valore della variabile di iterazione a una variabile locale e utilizzare la variabile locale nell'espressione lambda.
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