Share via


DirectCast

更新 : 2007 年 11 月

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

解説

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

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

エラーと失敗

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

型変換のキーワード

型変換キーワードの比較は次のようになります。

キーワード

データ型

引数の関係

実行時のエラー

CType 関数

Any 型

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

InvalidCastException をスロー

DirectCast

Any 型

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

InvalidCastException をスロー

TryCast

参照型のみ

一方の型が他方の型を継承または実装する必要がある

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