Option Infer — Instrukcja

Umożliwia używanie wnioskowania typu lokalnego w deklarowaniu zmiennych.

Składnia

Option Infer { On | Off }

generatora

Termin Definicja
On Opcjonalny. Włącza wnioskowanie typu lokalnego.
Off Opcjonalny. Wyłącza wnioskowanie typu lokalnego.

Uwagi

Aby ustawić Option Infer plik, wpisz Option Infer On lub Option Infer Off w górnej części pliku, przed jakimkolwiek innym kodem źródłowym. Jeśli wartość ustawiona Option Infer w pliku powoduje konflikt z wartością ustawioną w środowisku IDE lub w wierszu polecenia, wartość w pliku ma pierwszeństwo.

Po ustawieniu Option InferOnwartości na wartość można zadeklarować zmienne lokalne bez jawnego stwierdzenia typu danych. Kompilator wywnioskuje typ danych zmiennej z typu wyrażenia inicjalizacji.

Na poniższej ilustracji Option Infer jest włączona. Zmienna w deklaracji Dim someVar = 2 jest zadeklarowana jako liczba całkowita według wnioskowania typu.

Poniższy zrzut ekranu przedstawia funkcję IntelliSense, gdy funkcja Wnioskowanie opcji jest włączona:

Screenshot showing IntelliSense view when Option Infer is on.

Na poniższej ilustracji Option Infer jest wyłączona. Zmienna w deklaracji Dim someVar = 2 jest zadeklarowana jako Object wnioskowanie typu. W tym przykładzie ustawienie Opcja ścisła jest ustawione na Wartość Wyłączone na stronie kompilacji, Project Projektant (Visual Basic).

Poniższy zrzut ekranu przedstawia funkcję IntelliSense, gdy funkcja Wnioskowanie opcji jest wyłączona:

Screenshot showing IntelliSense view when Option Infer is off.

Uwaga

Gdy zmienna jest zadeklarowana jako zmienna Object, typ czasu wykonywania może ulec zmianie podczas działania programu. Program Visual Basic wykonuje operacje nazywane boxingiem i rozpętowywaniem w celu konwersji między typem wartości a Object , co sprawia, że wykonywanie jest wolniejsze. Aby uzyskać informacje na temat boksowania i rozpakowania, zobacz Specyfikację języka Visual Basic.

Wnioskowanie typu ma zastosowanie na poziomie procedury i nie ma zastosowania poza procedurą w klasie, strukturze, module lub interfejsie.

Aby uzyskać dodatkowe informacje, zobacz Wnioskowanie typu lokalnego.

Gdy instrukcja wnioskowania opcji nie jest obecna

Jeśli kod źródłowy nie zawiera Option Infer instrukcji, zostanie użyte ustawienie Wnioskowanie opcji na stronie kompilacji, zostanie użyty program Project Projektant (Visual Basic). Jeśli jest używany kompilator wiersza polecenia, jest używana opcja -optioninfer kompilatora.

Aby ustawić wnioskowanie opcji w środowisku IDE

  1. W Eksplorator rozwiązań wybierz projekt. W menu Project (Projekt) kliknij pozycję Properties (Właściwości).

  2. Kliknij kartę Kompiluj.

  3. Ustaw wartość w polu Wnioskowanie opcji.

Podczas tworzenia nowego projektu ustawienie Wnioskowanie opcji na karcie Kompilowanie jest ustawione na ustawienie Wnioskowanie opcji w oknie dialogowym Wartości domyślne VB. Aby uzyskać dostęp do okna dialogowego Ustawienia domyślne VB, w menu Narzędzia kliknij pozycję Opcje. W oknie dialogowym Opcje rozwiń węzeł Projekty i rozwiązania, a następnie kliknij pozycję Domyślne VB. Początkowe ustawienie domyślne w ustawieniach domyślnych VB to On.

Aby ustawić wnioskowanie opcji w wierszu polecenia

Dołącz opcję -optioninfer compiler w poleceniu vbc.

Domyślne typy danych i wartości

W poniższej tabeli opisano wyniki różnych kombinacji określania typu danych i inicjatora w instrukcji Dim .

Określony typ danych? Określony inicjator? Przykład Result
Nie Nie. Dim qty Jeśli Option Strict wartość jest wyłączona (wartość domyślna), zmienna jest ustawiona na Nothingwartość .

W przypadku Option Strict włączenia wystąpi błąd czasu kompilacji.
Nie. Tak Dim qty = 5 Jeśli Option Infer parametr jest włączony (wartość domyślna), zmienna przyjmuje typ danych inicjatora. Zobacz Wnioskowanie typu lokalnego.

Jeśli Option Infer wartość jest wyłączona i Option Strict wyłączona, zmienna pobiera typ Objectdanych .

Jeśli Option Infer jest wyłączona i Option Strict jest włączona, wystąpi błąd czasu kompilacji.
Tak Nie. Dim qty As Integer Zmienna jest inicjowana do wartości domyślnej dla typu danych. Aby uzyskać więcej informacji, zobacz Dim, instrukcja.
Tak Tak Dim qty As Integer = 5 Jeśli typ danych inicjatora nie jest konwertowany na określony typ danych, wystąpi błąd czasu kompilacji.

Przykład 1

W poniższych przykładach pokazano, jak Option Infer instrukcja umożliwia wnioskowanie typu lokalnego.

' 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

Przykład 2

W poniższym przykładzie pokazano, że typ czasu wykonywania może się różnić, gdy zmienna Objectjest identyfikowana jako .

' 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

Zobacz też