CType と DirectCastは式が一緒です。
指定した型から指定した型に変更するときに使います。
違いはなんでしょうか?
サンプルソースを使用してみていきましょう?
CType
CType(変換元,変換後の型)
Public Class Form1Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim a As Object = 3.14
Dim b As Integer = CType(a, Integer)
MsgBox(b)
End Sub
End Class
実行結果
3
当たり前だけどObject型からInteger型は変換はできるけど
Integer型は整数型だから桁落ちするよ。
CType は式が間違っていなれば型変換してくれます。
CType は型を暗黙的に変換するということです。
構文
DirectCast
DirectCast(変換元,変換後の型)
Public Class Form1Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim a As Object = 3.14
Dim b As Integer = DirectCast(a, Integer)
MsgBox(b)
End Sub
End Class
実行結果
メッセージーボックスも表示されません。
どういうことでしょうか?
メッセージーボックスされないのでそれまで実行されていないということです。
DirectCastのエラーですよ。
DirectCastでは桁落ちする場合変換されないんですよ。
本当にそうなのか試してみましょう?
Public Class Form1Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim a As Object = 3
Dim b As Integer = DirectCast(a, Integer)
MsgBox(b)
End Sub
End Class
実行結果
3
桁落ちしないように3にデータを変えました。
DirectCastはしっかりさんですね。
じゃあCTypeいらないじゃん。
いえいえDirectCastは継承関係のないクラスや互換性がない型へのキャストできません。
この場合はObject型はなので継承されています。
DirectCastだと継承関係ないのでDoubleからIntegerに変換できません。
CTypeなら出来ますけど整数型に出来ます。
桁落ちするけど。
整数型にしてる時点で桁落ちしていいんでしょうが。
何のためにそもそもキャストするのかでしょうけど。
DirectCastの方が実行スピードが速いです。
公式から
DirectCast は Visual Basic のランタイム ヘルパー ルーチンを変換に使用しません。このため、オブジェクト型 (Object) との間で変換を行う場合に、CType よりもいくらかパフォーマンスがよくなります。