DirectCast 演算子 (Visual Basic)

継承または実装に基づく型変換処理を実行します。

解説

DirectCast は Visual Basic のランタイム ヘルパー ルーチンを変換に使用しません。このため、オブジェクト型 (Object) との間で変換を行う場合に、CType よりもいくらかパフォーマンスがよくなります。

キーワード DirectCast は、CType 関数 (Visual Basic) およびキーワード TryCast 演算子 (Visual Basic) と似た方法で使用します。1 つ目の引数に式を指定し、2 つ目の引数に変換後の型を指定します。DirectCast の場合、この 2 つの引数のデータ型の間に、継承または実装の関係があることが必要です。つまり、一方の型が他方を継承しているか、実装している必要があります。

エラー

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

型変換のキーワード

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

Keyword

データ型

引数の関係

実行時のエラー

CType 関数 (Visual Basic)

Any 型

2 つのデータ型の間で拡大変換または縮小変換を定義する必要があります。

InvalidCastException をスロー

DirectCast

Any 型

一方の型が他方を継承または実装していることが必要

InvalidCastException をスロー

TryCast 演算子 (Visual Basic)

参照型のみ

一方の型が他方を継承または実装していることが必要

Nothing (Visual Basic) を返す

使用例

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 は成功します。しかし、最初の DirectCast は実行時に失敗します。Double のランタイム型は Integer に変換可能ですが、継承の関係にはないからです。2 番目の DirectCast は、Form 型から Control 型への変換です。FormControl を継承しているので成功します。

参照

関連項目

Convert.ChangeType

概念

拡大変換と縮小変換 (Visual Basic)

暗黙の型変換と明示的な型変換 (Visual Basic)