サーチ…


それは何ですか?

変数の宣言でローカル型の推論を使用できるようにします。

型推論とは何ですか?

明示的にデータ型を記述することなく、ローカル変数を宣言することができます。コンパイラは、初期化式の型から変数のデータ型を推論します。

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

明示的な型宣言に対して:

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

Option Infer Off:
Option Infer Offしたコンパイラの動作は、 ここで既に説明したOption Strict設定に依存します

  • Option Infer Off - Option Strict Off
    明示的な型宣言のないすべての変数はObjectとして宣言されます。

    Dim aString  = "1234" '--> Will be treated as Object by the compiler
    
  • Option Infer Off - Option Strict On
    コンパイラは、明示的な型なしで変数を宣言することはできません。

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

有効/無効にする方法

ドキュメントレベル

デフォルトでオンになっていますが、コードファイルの上部にOption Infer On|Offを設定することで設定できます。オプションはドキュメント全体に適用されます。

プロジェクトレベル

Visual Studioのメニューからそれをオン/オフに切り替えることができます:

プロジェクト> [プロジェクト]のプロパティ> [コンパイル]タブ>オプションの推論

ドロップダウンメニューでOn|Offを選択します。オプションはドキュメント全体に適用されます。

すべての新しいプロジェクト

次の項目を選択すると、デフォルトですべての新しいプロジェクトに対してオンに切り替えることができます。

ツール>オプション>プロジェクトとソリューション> VBデフォルト>オプション推論

ドロップダウンメニューでOn|Offを選択します。

型推論を使用する場合

基本的には、可能であればタイプ推論を使用することができます。
ただし、 Option Infer OffOption Strict Offを組み合わせると、望ましくない実行時の動作につながる可能性があるので注意してOption Infer Off

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

匿名タイプ
匿名型はOption Infer Onのみ宣言できます。
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
    コンパイラはエラーをスローします( Option Strict On
    qをtype objectOption Strict Off )とみなしobject
    どちらの場合も、匿名型を使用できないという結果が得られます。


二重/小数
デフォルトでは、小数点以下の数値変数はDoubleと見なされます。

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

Decimalような別の型が必要な場合は、変数を初期化した値をマークする必要があります。

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


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow