BC42324:ラムダ式内で繰り返し変数を使用すると、予期しない結果が発生する可能性があります。
ラムダ式内で反復変数を使用すると、予期しない結果が発生する可能性があります。 代わりに、ループ内にローカル変数を作成して反復変数の値を割り当ててください。
この警告は、ループ内で宣言されているラムダ式でループの反復変数を使用すると表示されます。 たとえば、次のコード例では、警告が表示されます。
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
次の例は、予期しない結果が発生する可能性があることを示しています。
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
For
ループは、それぞれがループの反復変数 i
の値を返す、ラムダ式の配列を作成します。 ラムダ式が For Each
ループで評価されると、0、1、2、3、および 4 (For
ループ内の i
の連続する値) が表示されると予想される場合があります。 そうではなく、i
の最終的な値が 5 回表示されます。
5
5
5
5
5
既定では、このメッセージは警告です。 警告を非表示にする方法や、警告をエラーとして扱う方法の詳細については、「 Configuring Warnings in Visual Basic」をご覧ください。
エラー ID: BC42324
このエラーを解決するには
- 反復変数の値をローカル変数に代入し、そのローカル変数をラムダ式で使用します。
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
関連項目
GitHub で Microsoft と共同作業する
このコンテンツのソースは GitHub にあります。そこで、issue や pull request を作成および確認することもできます。 詳細については、共同作成者ガイドを参照してください。
.NET
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示