Существует ли эквивалент VB.NET для ключевого слова С# var
?
Я хотел бы использовать его для получения результата запроса LINQ.
Существует ли эквивалент VB.NET для ключевого слова С# var
?
Я хотел бы использовать его для получения результата запроса LINQ.
Опущение типа в VB.NET(Visual Basic 9) будет неявно вводить переменную.
Это не то же самое, что "Option Strict Off" в предыдущих версиях VB.NET, поскольку переменная строго типизирована; он просто сделал это неявно (например, С# var
).
Dim foo = "foo"
foo
объявляется как String
.
Параметр Infer должен быть на, чтобы это нормально функционировало.
Вам нужно Option Infer On
, а затем просто используйте ключевое слово Dim
, таким образом:
Dim query = From x In y Where x.z = w Select x
В отличие от некоторых других ответов вам не нужно Option Strict On
.
Если вы используете VS IDE, вы можете просто нависать над именами переменных, но для получения переменных типа времени компиляции (GetType(variableName)
не компилируется - "Тип" <variablename> не определен. "- и VarType(variable)
на самом деле является только версией VB variable.GetType()
, которая возвращает тип экземпляра, хранящегося в переменной во время выполнения). Я использовал:
Function MyVarType(Of T)(ByRef Var As T) As Type
Return GetType(T)
End Function
Подробнее:
без Dim
:
Explicit Off
, дает Object
Explicit On
, ошибка "Имя" не объявлена.
с Dim
:
Infer On
, дает ожидаемые типы Infer Off
:
Strict On
, ошибка "Option Strict On" требует, чтобы все объявления имели класс "As".
Strict Off
, дает Object
Как я уже упоминал в комментариях, есть другие причины, почему Option Strict On
позволяет Linq выполнять более полезную работу. В частности, вы не можете получить Into Max(Anon.SomeString)
для работы с Option Strict Off
, хотя существует ряд обходных путей.
Просто используйте обычное ключевое слово 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
Объект работал у меня в этом примере
С#
JToken projects = client.Search(ObjCode.PROJECT, new { groupID = userGroupID });
foreach( var j in projects["data"].Children()) {
Debug.WriteLine("Name: {0}", j.Value<string>("name"));
}
VB
Dim projects As JToken = client.Search(ObjCode.PROJECT, New With { _
Key .groupID = userGroupID _
})
For Each j As Object In projects("data").Children()
Debug.WriteLine("Name: {0}", j.Value(Of String)("name"))
Next