変数 '<variablename>' の型は、外側のスコープ内のフィールドにバインドされているため、推論できません。
更新 : 2007 年 11 月
エラー メッセージ
変数 '<variablename>' の型は、外側のスコープ内のフィールドにバインドされているため、推論できません。'<variablename>' の名前を変更するか、完全修飾名 (例 : 'Me.variablename' や 'MyBase.variablename') を使用してください。
コードのループ制御変数は、クラスまたは他の外側のスコープ内のフィールドと同じ名前を持っています。制御変数は、As 句なしで使用されるため、外側のスコープ内のフィールドにバインドされ、コンパイラがこれに対して新しい変数を作成したり、その型を推論したりすることはありません。
次の例では、Index (For ステートメントの制御変数) が、Customer クラスの Index フィールドにバインドされています。コンパイラが制御変数 Index に対して新しい変数を作成したり、その型を推論したりすることはありません。
Class Customer
' The class has a field named Index.
Private Index As Integer
Sub Main()
' The following line will raise this warning.
For Index = 1 To 10
' ...
Next
End Sub
End Class
既定では、このメッセージは警告です。警告を表示しない方法や、警告をエラーとして扱う方法については、「Visual Basic での警告の構成」を参照してください。
Error ID: BC42110
この警告に対処するには
ループ制御変数の名前を、クラスのフィールドの名前とは異なる識別子に変更して、この変数をローカルにします。
For I = 1 To 10
変数名の前に Me. を付けることにより、クラス フィールドにループ制御変数がバインドされていることを明確にします。
For Me.Index = 1 To 10
ローカル型の推定ではなく As 句を使用して、ループ制御変数に型を指定します。
For Index As Integer = 1 To 10
使用例
次のコードは、上の例に最初の修正を行ったものです。
Class Customer
' The class has a field named Index.
Private Index As Integer
Sub Main()
' The following line will raise this warning.
For I = 1 To 10
' ...
Next
End Sub
End Class
参照
処理手順
概念
参照
For Each...Next ステートメント (Visual Basic)