Option Infer ステートメントOption Infer Statement

変数の宣言でローカル型推論を使用できるようにします。Enables the use of local type inference in declaring variables.

構文Syntax

Option Infer { On | Off }

指定項目Parts

用語Term DefinitionDefinition
On 省略可。Optional. ローカル型推論を有効にします。Enables local type inference.
Off 省略可。Optional. ローカル型推論を無効にします。Disables local type inference.

コメントRemarks

ファイルに Option Infer を設定するには、ファイルの先頭に他のソース コードよりも前に Option Infer On または Option Infer Off を入力します。To set Option Infer in a file, type Option Infer On or Option Infer Off at the top of the file, before any other source code. ファイルの Option Infer に設定した値が IDE またはコマンド ラインに設定した値と競合した場合は、ファイルの値が優先されます。If the value set for Option Infer in a file conflicts with the value set in the IDE or on the command line, the value in the file has precedence.

Option InferOn に設定すると、データ型を明示的に指定せずにローカル変数を宣言できます。When you set Option Infer to On, you can declare local variables without explicitly stating a data type. コンパイラは、初期化式の型から変数のデータ型を推測します。The compiler infers the data type of a variable from the type of its initialization expression.

次の図では、Option Infer がオンになっています。In the following illustration, Option Infer is turned on. 宣言 Dim someVar = 2 内の変数は、型の推定によって整数として宣言されています。The variable in the declaration Dim someVar = 2 is declared as an integer by type inference.

次のスクリーンショットは、オプションの推論がオンの場合の IntelliSense を示しています。The following screenshot shows IntelliSense when Option Infer is on:

オプションが推測された場合の IntelliSense ビューを示すスクリーンショット。

次の図では、Option Infer がオフになっています。In the following illustration, Option Infer is turned off. 宣言 Dim someVar = 2 内の変数は、型の推定によって Object として宣言されています。The variable in the declaration Dim someVar = 2 is declared as an Object by type inference. この例では、[コンパイル] ページ (プロジェクトデザイナー) (Visual Basic)で、 Option Strict設定がOffに設定されています。In this example, the Option Strict setting is set to Off on the Compile Page, Project Designer (Visual Basic).

次のスクリーンショットは、オプションの推論がオフの場合の IntelliSense を示しています。The following screenshot shows IntelliSense when Option Infer is off:

オプションの推論がオフのときの IntelliSense ビューを示すスクリーンショット。

注意

変数を Object として宣言すると、プログラムの実行中にランタイム型が変更される場合があります。When a variable is declared as an Object, the run-time type can change while the program is running. Visual Basic は、ボックス化とボックス化解除と呼ばれる操作を実行して、Object と値の型の間で変換を行います。これにより、実行速度が低下します。Visual Basic performs operations called boxing and unboxing to convert between an Object and a value type, which makes execution slower. ボックス化とボックス化解除の詳細については、 Visual Basic 言語の仕様を参照してください。For information about boxing and unboxing, see the Visual Basic Language Specification.

型の推定は、プロシージャ レベルで適用され、クラス、構造体、モジュール、またはインターフェイスのプロシージャの外側には適用されません。Type inference applies at the procedure level, and does not apply outside a procedure in a class, structure, module, or interface.

詳細については、「ローカル型の推論」を参照してください。For additional information, see Local Type Inference.

Option Infer ステートメントが指定されていない場合When an Option Infer Statement Is Not Present

ソースコードに Option Infer ステートメントが含まれていない場合、[[コンパイル] ページの プロジェクトデザイナー (Visual Basic) ] オプションが使用されます。If the source code does not contain an Option Infer statement, the Option Infer setting on the Compile Page, Project Designer (Visual Basic) is used. コマンドラインコンパイラが使用されている場合は、 -optioninferコンパイラオプションが使用されます。If the command-line compiler is used, the -optioninfer compiler option is used.

IDE の Option Infer を設定するにはTo set Option Infer in the IDE

  1. ソリューション エクスプローラーでプロジェクトを選択します。In Solution Explorer, select a project. [プロジェクト] メニューの [プロパティ] をクリックします。On the Project menu, click Properties.

  2. [コンパイル] タブをクリックします。Click the Compile tab.

  3. [推論] ボックスに値を設定します。Set the value in the Option infer box.

新しいプロジェクトを作成すると、コンパイル タブの 設定を推測するオプションVB の既定値 ダイアログボックスの 推定設定に設定されます。When you create a new project, the Option Infer setting on the Compile tab is set to the Option Infer setting in the VB Defaults dialog box. VB の [既定値] ダイアログボックスにアクセスするには、 [ツール] メニューの [オプション] をクリックします。To access the VB Defaults dialog box, on the Tools menu, click Options. [オプション] ダイアログ ボックスの [プロジェクトおよびソリューション] を展開し、 [VISUAL BASIC の既定値] をクリックします。In the Options dialog box, expand Projects and Solutions, and then click VB Defaults. [VB の既定] の初期の既定の設定は、Onです。The initial default setting in VB Defaults is On.

コマンド ラインで Option Infer を設定するにはTo set Option Infer on the command line

Vbc.exeコマンドに-optioninferコンパイラオプションを含めます。Include the -optioninfer compiler option in the vbc command.

既定のデータ型と値Default Data Types and Values

次の表では、Dim ステートメントのデータ型と初期化子を指定するさまざまな組み合わせの結果を示します。The following table describes the results of various combinations of specifying the data type and initializer in a Dim statement.

データ型が指定されているかData type specified? 初期化子が指定されているかInitializer specified? Example 結果Result
いいえNo いいえNo Dim qty Option Strict がオフ (既定値) の場合、変数は Nothing に設定されます。If Option Strict is off (the default), the variable is set to Nothing.

Option Strict がオンの場合、コンパイル時エラーが発生します。If Option Strict is on, a compile-time error occurs.
いいえNo はいYes Dim qty = 5 Option Infer がオン (既定値) の場合、変数は初期化子のデータ型になります。If Option Infer is on (the default), the variable takes the data type of the initializer. ローカル型の推定」を参照してください。See Local Type Inference.

Option Infer がオフで、Option Strict がオフの場合、変数は Object のデータ型になります。If Option Infer is off and Option Strict is off, the variable takes the data type of Object.

Option Infer がオフで、Option Strict がオンの場合、コンパイル時エラーが発生します。If Option Infer is off and Option Strict is on, a compile-time error occurs.
はいYes いいえNo Dim qty As Integer 変数は、データ型の既定値に初期化されます。The variable is initialized to the default value for the data type. 詳細については、「Dim ステートメント」を参照してください。For more information, see Dim Statement.
はいYes はいYes Dim qty As Integer = 5 初期化子のデータ型を指定したデータ型に変換できない場合は、コンパイル時エラーが発生します。If the data type of the initializer is not convertible to the specified data type, a compile-time error occurs.

Example

次の例では、Option Infer ステートメントがローカル型推論をどのように有効にするかを示します。The following examples demonstrate how the Option Infer statement enables local type inference.

' 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

Example

次の例では、変数が Object として識別されたときに、ランタイム型が異なる場合があることを示します。The following example demonstrates that the run-time type can differ when a variable is identified as an 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

参照See also