Recherche…


Qu'Est-ce que c'est?

Permet d'utiliser l'inférence de type local pour déclarer des variables.

Qu'est-ce que l'inférence de type?

Vous pouvez déclarer des variables locales sans indiquer explicitement un type de données. Le compilateur déduit le type de données d'une variable du type de son expression d'initialisation.

Option Infer On :

Dim aString  = "1234" '--> Will be treated as String by the compiler
Dim aNumber  = 4711   '--> Will be treated as Integer by the compiler

vs déclaration de type explicite:

'State a type explicitly
Dim aString as String = "1234"
Dim aNumber as Integer = 4711

Option Inverser Off:
Le comportement du compilateur avec Option Infer Off dépend du paramètre Option Strict qui est déjà documenté ici .

  • Option Inverser Off - Option Strict Off
    Toutes les variables sans déclaration de type explicite sont déclarées comme Object .

    Dim aString  = "1234" '--> Will be treated as Object by the compiler
    
  • Option Infer Off - Option Strict On
    Le compilateur ne vous laissera pas déclarer une variable sans type explicite.

    'Dim aString  = "1234" '--> Will not compile due to missing type in declaration
    

Comment l'activer / désactiver

Niveau du document

Il est activé par défaut, mais vous pouvez le définir en plaçant Option Infer On|Off en haut du fichier de code. L'option s'appliquera à l'ensemble du document.

Niveau du projet

Vous pouvez l'activer / désactiver via le menu de Visual Studio:

Projet> Propriétés du projet> Onglet Compiler> Option infer

Choisissez On|Off dans le menu déroulant. L'option s'appliquera à l'ensemble du document.

Tous les nouveaux projets

Vous pouvez l'activer par défaut pour tous les nouveaux projets en sélectionnant:

Outils> Options> Projets et solutions> Valeurs VB par défaut> Option Infer

Choisissez On|Off dans le menu déroulant.

Quand utiliser l'inférence de type

Fondamentalement, vous pouvez utiliser l'inférence de type chaque fois que cela est possible.
Toutefois, soyez prudent lorsque vous Option Infer Off et Option Strict Off , car cela peut entraîner un comportement d'exécution indésirable:

Dim someVar = 5
someVar.GetType.ToString() '--> System.Int32
someVar = "abc"
someVar.GetType.ToString() '--> System.String

Type anonyme
Les types anonymes ne peuvent être déclarés qu'avec Option Infer On .
Ils sont souvent utilisés pour traiter avec LINQ :

Dim countryCodes = New List(Of String)
countryCodes.Add("en-US")
countryCodes.Add("en-GB")
countryCodes.Add("de-DE")
countryCodes.Add("de-AT")

Dim q = From code In countryCodes
        Let split = code.Split("-"c)
        Select New With {.Language = split(0), .Country = split(1)}
  • Option Infer On
    Le compilateur reconnaîtra le type anonyme: Type anonyme - Option Infer On

  • Option Infer Off
    Le compilateur générera une erreur (avec Option Strict On )
    ou considérera q comme object type (avec Option Strict Off ).
    Les deux cas produiront le résultat que vous ne pouvez pas utiliser le type anonyme.


Doubles / Décimales
Les variables numériques avec des décimales seront inférées comme Double par défaut:

Dim aNumber = 44.11 '--> Will be treated as type `Double` by the compiler

Si un autre type comme Decimal est souhaité, la valeur qui a initialisé la variable doit être marquée:

Dim mDecimal = 47.11D '--> Will be treated as type `Decimal` by the compiler


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow