VB.NET эквивалентно C # var ключевое слово [дубликат]

Ответ @William Brendel предоставил три разных варианта использования красивым способом.

Использовать случай 1:

В документации по документации java на этот предоставляет те же варианты использования.

Внутри метода экземпляра или конструктора это ссылка на текущий объект - объект, чей метод или конструктор вызывается. Вы можете обратиться к любому члену текущего объекта из метода экземпляра или конструктора, используя это.

blockquote>

Он охватывает два примера:

Используя это с полем и Используя это с конструктором

Используйте случай 2:

Другой вариант использования, который имеет не цитируется в этом сообщении: this может использоваться для синхронизации текущего объекта в многопоточном приложении для защиты критического раздела данных & amp; методы.

synchronized(this){
    // Do some thing. 
}

Использовать случай 3:

Реализация шаблона Builder зависит от использования this для возврата измененный объект.

См. этот пост

Сохранение строителя в отдельном классе (свободный интерфейс)

143
задан Matthew Murdoch 21 May 2012 в 12:23
поделиться

3 ответа

Параметр Infer должен быть на , чтобы это работало правильно. Если это так, то при отсутствии типа в VB.NET (Visual Basic 9) переменная будет неявно введена.

Это не то же самое, что "Option Strict Off" в предыдущих версиях VB.NET, поскольку переменная является строго типизированной; это делается неявно (как ключевое слово C # var ).

Dim foo = "foo"

foo объявлен как String .

142
ответ дан 23 November 2019 в 22:50
поделиться

Просто используйте обычное ключевое слово Dim без типа.

Минимальный рабочий пример:

Option Strict On ' Always a good idea
Option Infer On ' Required for type inference

Imports System

Module MainModule
    Sub Main()
        Dim i = 42
        Dim s = "Hello"
        Console.WriteLine("{0}, {1}", i.GetType(), s.GetType())
        ' Prints System.Int32, System.String '
    End Sub
End Module
15
ответ дан 23 November 2019 в 22:50
поделиться

Вам понадобится Option Infer On , а затем просто используйте ключевое слово Dim , таким образом:

Dim query = From x In y Where x.z = w Select x

В отличие от В некоторых других ответах вам не требуется Option Strict On .

Если вы используете VS IDE, вы можете просто навести указатель мыши на имена переменных, но чтобы получить типы переменных времени компиляции ( GetType (variableName) не компилируется - «Type» <имя переменной > 'не определено. "- и VarType (variable) на самом деле является просто версией VB переменной. GetType () , которая возвращает тип экземпляра, хранящегося в переменной во время выполнения ) Я использовал:

Function MyVarType(Of T)(ByRef Var As T) As Type
    Return GetType(T)
End Function

Подробно:

  • без Dim :

    Явное отключение , дает Объект

    Явное включение , ошибка «Имя» не объявлен. "

  • с Dim :

    • Infer On , дает ожидаемые типы
    • Infer Off :

      Strict On , ошибка» Опция Strict On требует, чтобы все объявления имели класс As. "

      Strict Off , дает Object

Как я упоминал в комментариях, есть другие причины , почему Option Strict On позволяет Linq работать более эффективно. В частности, вы не можете заставить Into Max (Anon.SomeString) работать с Option Strict Off , хотя есть несколько обходных путей.

45
ответ дан 23 November 2019 в 22:50
поделиться