Visual Basic .NET Language
Option Infer
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 commeObject
.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 Off
Le compilateur générera une erreur (avecOption Strict On
)
ou considéreraq
commeobject
type (avecOption 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