Il tipo della variabile '<nomevariabile>' non verrà dedotto perché associato a un ambito di inclusione

Aggiornamento: novembre 2007

Messaggio di errore

Inferenza del tipo per la variabile '<nomevariabile>' non riuscita perché è associato a un campo nell'ambito che lo contiene. Cambiare il nome di '<nomevariabile>' o utilizzare il nome completo, ad esempio 'Me.nomevariabile' o 'MyBase.nomevariabile'.
The type for variable '<variablename>' will not be inferred because it is bound to a field in an enclosing scope. Either change the name of '<variablename>', or use the fully qualified name (for example, 'Me.variablename' or 'MyBase.variablename').

Una variabile di controllo del ciclo nel codice ha lo stesso nome di un campo della classe e di altro ambito che lo contiene. Poiché la variabile di controllo è utilizzata senza una clausola As, è associata al campo nell'ambito che la contiene e il compilatore non è in grado di creare per essa una nuova variabile né di dedurne il tipo.

Nell'esempio riportato di seguito, Index, la variabile di controllo nell'istruzione For, è associata al campo Index nella classe Customer. Il compilatore non crea una nuova variabile per la variabile di controllo Index né ne deduce il tipo.

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

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: BC42110

Se viene visualizzato questo avvertimento

  • Rendere locale la variabile di controllo del ciclo impostandone il nome su un identificatore che non sia anche il nome di un campo della classe.

    For I = 1 To 10
    
  • Chiarire che la variabile di controllo del ciclo è associata al campo della classe inserendo il prefisso Me. davanti al nome della variabile.

    For Me.Index = 1 To 10
    
  • Anziché affidarsi all'inferenza dei tipi locali, utilizzare la clausola As per specificare un tipo per la variabile di controllo del ciclo.

    For Index As Integer = 1 To 10
    

Esempio

Nel codice riportato di seguito viene illustrato l'esempio precedente a cui è stata applicata la prima correzione.

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

Vedere anche

Attività

Procedura: fare riferimento all'istanza corrente di un oggetto

Concetti

Inferenza dei tipi locali

Riferimenti

Istruzione Option Infer

Istruzione For Each...Next (Visual Basic)

Istruzione For...Next (Visual Basic)

Me