次の方法で共有


DirectCast 演算子 (Visual Basic)

継承または実装に基づく型変換操作を導入します。

Remarks

DirectCast では、変換に Visual Basic ランタイム ヘルパー ルーチンが使用されないため、データ型 Object 間で変換を行う場合、CType よりも多少パフォーマンスが向上する可能性があります。

DirectCast キーワードは、CType 関数および TryCast 演算子キーワードを使用するのと同じ方法で使用します。 1 番目の引数として式を指定し、2 番目の引数としてその式を変換する先の型を指定します。 DirectCast には、2 つの引数のデータ型間の継承または実装関係が必要です。 つまり、一方の型が他方の型を継承または実装する必要があります。

エラーと障害

DirectCast で、継承関係または実装関係が存在しないことが検出されると、コンパイラ エラーが発生します。 ただし、コンパイラ エラーが発生しない場合でも、変換が正常に行われるとは限りません。 目的の変換が縮小変換の場合、実行時に失敗する可能性があります。 これが発生すると、ランタイムで InvalidCastException エラーがスローされます。

変換キーワード

型変換のキーワードの比較を次に示します。

キーワード データの種類 引数の関係 ランタイム エラー
CType 関数 任意のデータ型 2 つのデータ型の間で拡大変換または縮小変換を定義する必要があります InvalidCastException をスローする
DirectCast 任意のデータ型 一方の型が他方の型を継承または実装する必要があります InvalidCastException をスローする
TryCast 演算子 参照型のみ 一方の型が他方の型を継承または実装する必要があります Nothing が返されます

次の例は、DirectCast の 2 つの使用方法を示しています。1 つは実行時に失敗し、もう 1 つは成功します。

Dim q As Object = 2.37
Dim i As Integer = CType(q, Integer)
' The following conversion fails at run time
Dim j As Integer = DirectCast(q, Integer)
Dim f As New System.Windows.Forms.Form
Dim c As System.Windows.Forms.Control
' The following conversion succeeds.
c = DirectCast(f, System.Windows.Forms.Control)

前の例では、q の実行時の型が Double です。 DoubleInteger に変換できるため、CType は成功します。 ただし、Double の実行時の型には Integer との継承関係がないため、変換が存在する場合でも、実行時に最初の DirectCast は失敗します。 2 番目の DirectCast は、型 Form から型 Control に変換し、そこから Form が継承されるため、成功します。

関連項目