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
です。 Double
は Integer
に変換できるため、CType
は成功します。 ただし、Double
の実行時の型には Integer
との継承関係がないため、変換が存在する場合でも、実行時に最初の DirectCast
は失敗します。 2 番目の DirectCast
は、型 Form から型 Control に変換し、そこから Form が継承されるため、成功します。
関連項目
.NET