Option Infer ステートメント
変数の宣言に対するローカル型の推論の使用を有効にします。
Option Infer { On | Off }
指定項目
語句 |
定義 |
On |
省略可能です。ローカル型の推論を有効にします。 |
Off |
省略可能です。ローカル型の推論を無効にします。 |
解説
ファイルで Option Infer を設定するには、ファイルの先頭の、他のソース コードの前に Option Infer On または Option Infer Off を入力します。ファイル内の Option Infer の設定値が、IDE またはコマンド ラインでの設定値と競合する場合は、ファイル内の値が優先します。
Option Infer を On に設定すると、明示的にデータ型を指定せずにローカル変数を宣言できます。コンパイラは変数のデータ型を初期化式の型から推論します。
次の図では、Option Infer が On になっています。宣言 Dim someVar = 2 の変数は、型の推論によって整数として宣言されています。
Option Infer が有効な場合の IntelliSense
次の図では、Option Infer が Off になっています。宣言 Dim someVar = 2 の変数は、型の推論によって Object として宣言されています。この例では、[コンパイル] ページ (プロジェクト デザイナー) (Visual Basic) で Option Strict 設定が Off に設定されています。
Option Infer が Off の場合の IntelliSense
[!メモ]
変数が Object として宣言されている場合、プログラムの実行中に実行時の型が変化することがあります。Visual Basic は Object と実行時間が長くする値の型を変換するには ボックス化 および ボックス化解除と 呼ばれる処理を実行します。ボックス化とボックス化解除については、「Visual Basic 言語仕様」を参照してください。
型の推論はプロシージャ レベルで適用され、クラス、構造体、モジュール、またはインターフェイスのプロシージャの外部には適用されません。
詳細については、「ローカル型の推論 (Visual Basic)」を参照してください。
Option Infer ステートメントが存在しない場合
ソース コードに Option Infer ステートメントが含まれていない場合は、[コンパイル] ページ (プロジェクト デザイナー) (Visual Basic) の Option Infer 設定が使用されます。コマンド ライン コンパイラを使用する場合は、/optioninfer コンパイラ オプションが使用されます。
IDE で Option Infer を設定するには
ソリューション エクスプローラーでプロジェクトを選択します。[プロジェクト] メニューの [プロパティ] をクリックします。詳細については、「プロジェクト デザイナーの概要」を参照してください。
[コンパイル] タブをクリックします。
[Option infer] ボックスに値を設定します。
新しいプロジェクトを作成するとき、[コンパイル] タブの [Option Infer] 設定は、[Visual Basic の既定値] ダイアログ ボックスの [Option Infer] 設定に設定されます。[Visual Basic の既定値] ダイアログ ボックスを表示するには、[ツール] メニューの [オプション] をクリックします。[オプション] ダイアログ ボックスで、[プロジェクトおよびソリューション] を展開し、[Visual Basic の既定値] をクリックします。[Visual Basic の既定値] の既定の初期設定は On です。
コマンド ラインで Option Infer を設定するには
- vbc コマンドに /optioninfer コンパイラ オプションを含めます。
既定のデータ型と値
次の表に、Dim ステートメントで、データ型と初期化子をさまざまに組み合わせて指定した場合の結果を示します。
データ型が指定されている |
初期化子が指定されている |
例 |
結果 |
X |
X |
Dim qty |
Option Strict が Off (既定値) の場合、変数は Nothing に設定されます。 Option Strict が On の場合、コンパイル時のエラーが発生します。 |
X |
○ |
Dim qty = 5 |
Option Infer が On (既定値) の場合、変数は初期化子のデータ型になります。「ローカル型の推論 (Visual Basic)」を参照してください。 Option Infer が Off で、Option Strict が Off の場合、変数は Object のデータ型になります。 Option Infer が Off で、Option Strict が On の場合、コンパイル時のエラーが発生します。 |
○ |
X |
Dim qty As Integer |
変数は、データ型の既定値に初期化されます。詳細については、「Dim ステートメント (Visual Basic)」を参照してください。 |
○ |
○ |
Dim qty As Integer = 5 |
初期化子のデータ型が、指定されたデータ型に変換できない場合、コンパイル時のエラーが発生します。 |
使用例
次の例は、Option Infer ステートメントを使用してローカル型の推論を有効にする方法を示しています。
' Enable Option Infer before trying these examples.
' Variable num is an Integer.
Dim num = 5
' Variable dbl is a Double.
Dim dbl = 4.113
' Variable str is a String.
Dim str = "abc"
' Variable pList is an array of Process objects.
Dim pList = Process.GetProcesses()
' Variable i is an Integer.
For i = 1 To 10
Console.WriteLine(i)
Next
' Variable item is a string.
Dim lst As New List(Of String) From {"abc", "def", "ghi"}
For Each item In lst
Console.WriteLine(item)
Next
' Variable namedCust is an instance of the Customer class.
Dim namedCust = New Customer With {.Name = "Blue Yonder Airlines",
.City = "Snoqualmie"}
' Variable product is an instance of an anonymous type.
Dim product = New With {Key .Name = "paperclips", .Price = 1.29}
' If customers is a collection of Customer objects in the following
' query, the inferred type of cust is Customer, and the inferred type
' of custs is IEnumerable(Of Customer).
Dim custs = From cust In customers
Where cust.City = "Seattle"
Select cust.Name, cust.ID
次の例は、変数が Object として識別された場合に、実行時の型が変化することがあることを示しています。
' Disable Option Infer when trying this example.
Dim someVar = 5
Console.WriteLine(someVar.GetType.ToString)
' If Option Infer is instead enabled, the following
' statement causes a run-time error. This is because
' someVar was implicitly defined as an integer.
someVar = "abc"
Console.WriteLine(someVar.GetType.ToString)
' Output:
' System.Int32
' System.String
参照
関連項目
Option Explicit ステートメント (Visual Basic)
[Visual Basic の既定値] ([オプション] ダイアログ ボックス - [プロジェクト])
ボックス化とボックス化解除 (C# プログラミング ガイド)