web-dev-qa-db-ja.com

C#varキーワードに相当するVB.NET

C#varキーワードに相当するVB.NETはありますか?

LINQクエリの結果を取得するために使用したいと思います。

144
Jack

Option Infer は、これが適切に機能するためにonでなければなりません。その場合、VB.NET(Visual Basic 9)で型を省略すると、変数が暗黙的に入力されます。

これはnot VB.NETの以前のバージョンの「Option Strict Off」と同じです。変数はis強く型付けされています。 (C#varのように)キーワードで暗黙的に行われただけです。

Dim foo = "foo"

fooStringとして宣言されます。

141
Adam Robinson

Option Infer Onが必要で、Dimキーワードを使用するだけです。

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

他のいくつかの答えとは反対に、あなたはしませんOption Strict Onは必要ありません。

VS IDEを使用している場合は、変数名にカーソルを合わせることができますが、コンパイル時のタイプの変数を取得するには(GetType(variableName)はコンパイルされません-"Type '<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と連携させることはできません。

45
Mark Hurd

型なしで従来の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
Konrad Rudolph