VB.NET equivalent to C# var keyword [duplicate]
Option Infer must be on in order for this to function properly. If so, then omitting the type in VB.NET (Visual Basic 9) will implicitly type the variable.
This is not the same as "Option Strict Off" in previous versions of VB.NET, as the variable is strongly-typed; it's just done so implicitly (like the C# var
) keyword.
Dim foo = "foo"
foo
is declared as a String
.
You need Option Infer On
and then just use the Dim
keyword, thus:
Dim query = From x In y Where x.z = w Select x
Contrary to some of the other answers, you do not need Option Strict On
.
If you're using the VS IDE you can just hover over the variable names, but to get the compile-time types of variables (GetType(variableName)
does not compile - "Type '<variablename>' is not defined." - and VarType(variable)
is actually just the VB version of variable.GetType()
which returns the type of the instance stored in the variable at runtime) I used:
Function MyVarType(Of T)(ByRef Var As T) As Type
Return GetType(T)
End Function
In detail:
-
without
Dim
:Explicit Off
, givesObject
Explicit On
, error "Name '' is not declared." -
with
Dim
:-
Infer On
, gives expected types -
Infer Off
:Strict On
, error "Option Strict On requires all declarations to have an 'As' clasue."Strict Off
, givesObject
-
As I mentioned in the comments, there are other reasons why Option Strict On
allows Linq to perform more usefully. Specifically, you can't get Into Max(Anon.SomeString)
to work with Option Strict Off
, though there are a number of workarounds.