.NET VB データ型変換(キャスト)

最終更新日

データ型を変換する方法について調べた。インライン関数、Convetクラス、DirectCast演算子、CType関数、TryCast演算子、Parse・TryParse メソッドについて解説とサンプルコードを掲載しておく。

インライン関数

インライン関数は、コンパイル時にその関数位置に直接コードが展開されて埋め込まれるため、関数の呼び出しというオーバーヘッドがないため実行スピードが一般の関数より速い

構文

任意の変数 = データ型変換関数(変換の対象)

CBool:ブール型変換

引数を評価してブール型(真(True)/偽(False))を返す関数。

戻り値引数範囲
ブール型(Boolean)任意の有効な文字列(String)、または数式

サンプルコード

'基本的な使用方法 -----------------------------------------
 Dim bolA As Boolean
 Dim strB As String = "1"
 bolA = CBool(strB)
 Console.WriteLine("文字列型→boolean型     型変換:" & bolA)

 '---------------------------------------------------------
'文字列からboolean型へ変換
 Console.WriteLine("文字列 0→boolean型     型変換:" & CBool("0"))
 Console.WriteLine("文字列 1→boolean型     型変換:" & CBool("1"))
 Console.WriteLine("文字列 false→boolean型 型変換:" & CBool("false"))
 Console.WriteLine("文字列 true→boolean型  型変換:" & CBool("true"))

 '数字型からboolean型へ変換
 Console.WriteLine("数字  0→boolean型     型変換:" & CBool(0))
 Console.WriteLine("数字  1→boolean型     型変換:" & CBool(1))
 Console.WriteLine("数字  2→boolean型     型変換:" & CBool(2))

 '浮動小数点数からboolean型変換
 Console.WriteLine("小数  2→boolean型     型変換:" & CBool(1.2))

'例外パターン
 Console.WriteLine("文字列:" & CBool("test"))                  'FormatException発生
 Console.WriteLine("文字 :" & CBool("O"))                     'FormatException発生
 Dim strC As String = Nothing
 Console.WriteLine("Nothing :" & CBool(strC))                  'FormatException発生

CByte:バイト型変換

引数を評価してバイト型(Byte)データに変換する関数。

戻り値引数範囲
バイト型(Byte)値の範囲は0~255。小数部分は丸められる。

サンプルコード

'数字型からバイト型へ変換
 Console.WriteLine("数字型 10→バイト型      型変換:" & CByte(10))
 '小数点からバイト型へ変換
 Console.WriteLine("小数点型 1.1→バイト型   型変換:" & CByte(1.1)) '小数点部分が丸められる
 '文字列からバイト型へ変換
 Console.WriteLine("文字列型 1→バイト型     型変換:" & CByte("1"))
 'バイト型で扱えない数字の変換
 Console.WriteLine("数字型 256→バイト型     型変換:" & CByte(256)) 'byte型で表現できないエラーが発生

CChar:文字型変換

引数を評価して文字型(Char)に変換する関数。

戻り値引数範囲
文字型(Char)任意の有効な文字列型(String)の式。値の範囲は0~65535

サンプルコード

 Dim strA As String = "あ"
 Console.WriteLine("文字列型 あ→バイト型         型変換:" & CChar(strA))
 '数字型から文字型へ変換
 Console.WriteLine("数字型 10→バイト型           型変換:" & CChar(10))  'エラーが発生する
 '小数点から文字型へ変換
 Console.WriteLine("小数点型 1.1→バイト型        型変換:" & CChar(1.1)) 'エラーが発生する
 '文字列から文字型へ変換
 Console.WriteLine("文字列型 今日は→バイト型     型変換:" & CChar("今日は")) '二文字目以降が切り捨てられる

CDate:日付型変換

引数を評価して日付型に変換する関数。

文字列や日付リテラルなどを日付型のデータに変換する場合に使用します。

この関数は、引数として渡された日付と評価できる値を日付型(Date)に変換します。引数が日付と評価できた場合、この関数は引数を日付型(Date)に変換しますが、日付と評価できなかった場合は実行時エラーとなります。

 IsDate関数 を使用すると、引数を日付に変換できるかどうかを調べることができるので、この関数を使用する前に変換可能かチェックしておくとよい。

数式で値を指定する場合は、「1899/12/30」からの日数で指定します。 また、時間も同時に指定する場合は、少数点数を使用します。 値に少数が含まれる場合、この関数は整数部を日付と解釈し、小数部を時間と解釈します。

戻り値引数範囲
日付型(Date)日付や時刻

サンプルコード

'基本的な使用方法
Dim strA As String = "2020/01/01"
Console.WriteLine("文字列型 2020/01/01→バイト型 型変換:" & CDate(strA).ToString())

Console.WriteLine("文字列型 2020/01/01 10:15:01→バイト型 型変換:" & CDate("2020/01/01 10:15:01").ToString())
Console.WriteLine("文字列型 21/03/02→バイト型     型変換:" & CDate("21/03/02").ToString())
Console.WriteLine("文字列型 S55.03.21→バイト型    型変換:" & CDate("S55.03.21").ToString())
Console.WriteLine("文字列型 2020/01/01→バイト型   型変換:" & CDate("20200101").ToString()) 
'System.InvalidCastException発生
'数字型から文字型へ変換
Console.WriteLine("数字型 20200101→バイト型      型変換:" & CDate(20200101).ToString())  'エラーが発生する
'小数点から文字型へ変換
Console.WriteLine("小数点型 1.1→バイト型        型変換:" & CDate(1.1).ToString())       'エラーが発生する
'文字列から文字型へ変換
Console.WriteLine("文字列型 今→バイト型          型変換:" & CDate("今").ToString())
'System.InvalidCastException発生

CDbl:倍精度浮動小数点数型変換

引数に与えられた値を倍精度浮動小数点数型(double)に変換する関数。

引数に文字列を指定した場合は、文字列が数値として認識できる限り、同等の数式と等価に扱われますが、それ以外の文字列が指定された場合は実行時エラーとなる。

戻り値引数範囲
倍精度浮動小数点数型(Double)-1.79769313486231570 E + 308から-4.94065645841246544 E-324(負の値)
4.94065645841246544 E-324から1.79769313486231570 E + 308(正の値)

サンプルコード

'基本的な使い方
Dim intA As Integer = 1
Console.WriteLine("数字型 1→倍精度浮動小数点数型   型変換:" & CDbl(intA))

'小数点から文字型へ変換
Console.WriteLine("小数点型 1.1→バイト型         型変換:" & CDbl(1.1))
'文字列から文字型へ変換
Console.WriteLine("文字列型 1.2は→バイト型       型変換:" & CDbl("1.2"))
'扱える数字を超えたへ変換
Console.WriteLine("浮動小数点型 超えた数字→バイト型  型変換:" & CDbl("4.94065645841246555")) '丸められる

CDec:10進型変換

引数を評価して 10 進型(Decimal)に変換する関数。

戻り値引数範囲
10進型(Decimal)0~+/-79,228,162,514,264,337,593,543,950,335
(小数点なし)(正負の値)
0~+/-7.9228162514264337593543950335
(小数点以下28桁)
0 以外の最小値は +/-0.0000000000000000000000000001 (+/-1E-28)

サンプルコード

'基本的な使い方
Dim intA As Integer = 1
Console.WriteLine("数字型 1→倍精度浮動小数点数型   型変換:" & CDec(intA))

'小数点から10進型へ変換
Console.WriteLine("小数点型 1.1→バイト型         型変換:" & CDec(4.9406564584124659)) '丸められる
'文字列から10進型へ変換
Console.WriteLine("文字列型 1.2は→バイト型       型変換:" & CDec("1.2"))
'扱える数字10進型へ変換
Console.WriteLine("文字列型 超えた数字→バイト型      型変換:" & CDec("4.9406564584124659"))
Console.WriteLine("文字列型 超えた数字→バイト型      型変換:" & CDec("7.9228162514264337593543950335"))
Console.WriteLine("文字列型 超えた数字→バイト型      型変換:" & CDec("7.9228162514264337593543950336")) '丸められる
Console.WriteLine("文字列型 超えた数字→バイト型      型変換:" & CDec("2021/04/01"))
'InvalidCastExceptionが発生

Cint:整数型変換

引数を評価して整数型に変換する関数。

引数に文字列を指定した場合は、文字列が数値として評価できる場合に限り、同等の数式と等価に扱われますが、それ以外の文字列の場合はエラーとなります。

戻り値引数範囲
整数型(Integer)値の範囲は、-2,147,483,648 から 2,147,483,647 

サンプルコード

'基本的な使い方
Dim lonA As Long = 100000000
Console.WriteLine("数字型 1→整数型               型変換:" & CInt(lonA).to)

'小数点から10進型へ変換
Console.WriteLine("小数点型 1.1→整数型         型変換:" & CInt(4.9406564584124659))   '丸められる
'文字列から10進型へ変換
Console.WriteLine("文字列型 1.2は→整数型       型変換:" & CInt("1.2"))                '丸められる
'扱える数字10進型へ変換
Console.WriteLine("文字列型 超えた数字→整数型      型変換:" & CInt("4.9406564584124659")) '丸められる
Console.WriteLine("文字列型 超えた数字→整数型     型変換:" & CInt("2021/04/01"))       'InvalidCastExceptionが発生

CLng:長整数型変換

引数を評価して長整数型に変換する関数。

戻り値引数範囲
長整数型(Long)値の範囲は、-9,223,372,036,854,775,808 から
9,223,372,036,854,775,807 (9.2…E+18) 

サンプルコード

 '基本的な使い方
 Dim intA As Integer = 100000000
 Console.WriteLine("数字型 1→長整数型            型変換:" & CLng(intA).ToString())

 '小数点から10進型へ変換
 Console.WriteLine("小数点型 1.1→長整数型        型変換:" & CLng(4.9406564584124659).ToString())   
 '丸められる

 '文字列から10進型へ変換
 Console.WriteLine("文字列型 1.2は→長整数型      型変換:" & CLng("1.2").ToString())                
 '丸められる

 '扱える数字10進型へ変換
 Console.WriteLine("文字列型 超えた数字→長整数型   型変換:" & CLng("4.9406564584124659").ToString()) 
 '丸められる
 Console.WriteLine("文字列型 超えた数字→長整数型  型変換:" & CLng("2021/04/01").ToString())      'InvalidCastExceptionが発生

CShort:短整数型変換

引数を評価して短整数型に変換する関数。

戻り値引数範囲
短整数型(Short)値の範囲は、-32,768 から 32,767 。小数部分は丸められる

サンプルコード

'基本的な使い方
 Dim intA As Integer = 1000
 Console.WriteLine("数字型 1            →短整数型へ変換:" & CShort(intA).ToString())

 '小数点から10進型へ変換
 Console.WriteLine("小数点型 1.1        →短整数型へ変換:" & CShort(4.9406564584124659).ToString()) '丸められる
 '文字列から10進型へ変換
 Console.WriteLine("文字列型 1.2は      →短整数型へ変換:" & CShort("1.2").ToString())                '丸められる
 '扱える数字10進型へ変換
 Console.WriteLine("文字列型 超えた数字  →短整数型へ変換:" & CShort("4.9406564584124659").ToString()) '丸められる

 '例外パターン
 Dim intB As Integer = 100000000
 Console.WriteLine("数字型 1            →短整数型へ変換:" & CShort(intB).ToString())      'OverflowException発生
 Console.WriteLine("文字列型 超えた数字  →短整数型へ変換:" & CShort("2021/04/01").ToString()) 
'InvalidCastException発生

CSng:単精度浮動小数点数型変換

引数を評価して単精度浮動小数点数型(single)に変換する関数。

引数に文字列を指定した場合は、文字列が数値として評価できる場合に限り、同等の数式と等価に扱われますが、それ以外の文字列が指定された場合は実行時エラーとなります。

戻り値引数範囲
単精度浮動小数点数型(Single)値の範囲は、-3.4028235E+38 から -1.401298E-45
 1.401298E-45 から 3.4028235E+38

サンプルコード

'基本的な使い方
Dim intA As Integer = 1
Console.WriteLine("1(数値型)          →倍精度浮動小数点数型変換:" & CSng(intA).ToString())

'小数点から文字型へ変換
Console.WriteLine("1.1(小数型)        →倍精度浮動小数点数型変換:" & CSng(1.1).ToString())
'文字列から文字型へ変換
Console.WriteLine("1.2(文字列型)      →倍精度浮動小数点数型変換:" & CSng("1.2").ToString())
'扱える数字を超えたへ変換
Console.WriteLine("範囲外(文字列型)    →倍精度浮動小数点数型変換" & CSng("4.94065645841246555").ToString()) 
'丸められる
'例外パターン
Console.WriteLine("2021/04/01(文字列型)  →倍精度浮動小数点数型変換:" & CSng("2021/04/01").ToString().ToString()) 

CStr:文字列型変換

引数を評価して文字列型に変換する関数。

戻り値引数範囲
文字列型(String)プール型(Boolean)、日付型(Date)、数値

サンプルコード

'基本的な使い方
Dim intA As Integer = 1
Console.WriteLine("1(数値型)          →文字列へ変換:" & CStr(intA))

Dim bolB As Boolean = false
Console.WriteLine("false(boolean型)   →文字列へ変換:" & CStr(bolB ))

'小数点から文字型へ変換
Console.WriteLine("1.1(小数型)        →文字列へ変換:" & CStr(1.1))
'文字列から文字型へ変換
Console.WriteLine("1.2(文字列型)      →文字列へ変換:" & CStr("1.2"))

CObj:オブジェクト型変換

戻り値引数範囲
オブジェクト型(Object)任意の有効な式
'基本的な使い方
Dim strA As String = "VB .NET"
Console.WriteLine("VB .NET(文字列)          →オブジェクト型:" & CObj(strA ).toString())

データ型のコンバート(Convertクラス)

データ型を他のデータ型に変換します。また、C#.NETと互換性があるコードで記述できる。

構文

任意の変数 = Convert.データ型変換メソッド(変換の対象)

ToByte:バイト型変換

指定した値を8ビット符号なし整数に変換する

戻り値引数範囲例外
Byte変換する数値を含んだ文字列0 から 255FormatException
OverflowException

構文

変数 = Convert.ToByte(変換の対象)

サンプルコード

Dim bytX As Byte = 0

'整数型宣言
Dim shoX As Short = 123
bytX = Convert.ToByte(shoX)
Console.WriteLine("Short   > Byte型の値:" & bytX.ToString())

Dim intX As Integer = 123
bytX = Convert.ToByte(intX)
Console.WriteLine("Integer > Byte型の値:" & bytX.ToString())

Dim lngX As Long = 123
bytX = Convert.ToByte(lngX)
Console.WriteLine("Long    > Byte型の値:" & bytX.ToString())

'文字列型宣言
Dim douX As Double = 123.254
bytX = Convert.ToByte(douX)
Console.WriteLine("Double  > Byte型の値:" & bytX.ToString())

'10進数型宣言
Dim decX As Decimal = 123
bytX = Convert.ToByte(decX)
Console.WriteLine("Decimal > Byte型の値:" & bytX.ToString())

'文字列型宣言
Dim strX As String = "123"
bytX = Convert.ToByte(strX)
Console.WriteLine("String  > Byte型の値:" & bytX.ToString())

'boolean型宣言
Dim bolX As Boolean = False
bytX = Convert.ToByte(bolX)
Console.WriteLine("Boolean> Byte型の値:" & bytX.ToString())

'例外パターン
Console.WriteLine("例外    > Byte型の値:" & Convert.ToByte(".NET").ToString)
Console.WriteLine("例外    > Byte型の値:" & Convert.ToByte("2020/04/01").ToString)
Console.WriteLine("例外    > Byte型の値:" & Convert.ToByte("123").ToString)
Console.WriteLine("例外    > Byte型の値:" & Convert.ToByte(256).ToString)

Toint16:Short型変換

指定した値を16ビット符号付き整数に変換する。DateTime型を引数にセットした場合は、例外発生する。

戻り値引数範囲例外
Int16変換する数値・文字列。-32768から+32767
(符号付き整数)
ArgumentException
ArgumentOutOfRangeException
FormatException
InvalidCastException
OverflowException

構文

変数 = Convert.Toint16(変換の対象)

サンプルコード

ToByteを参照

Toint32:Integer型変換

指定した値を32ビット符号付き整数に変換する。DateTime型を引数にセットした場合は、例外発生する。

戻り値引数変換範囲例外
Int32変換する数値・文字列。-2147483648から+2147483647
(符号付き整数)
ArgumentException
ArgumentOutOfRangeException
FormatException
InvalidCastException
OverflowException

構文

変数 = Convert.Toint32(変換の対象)

Toint64:Long型変換

指定した値を64ビット符号付き整数に変換する。DateTime型を引数にセットした場合は、例外発生する。

戻り値引数変換範囲例外
Int64変換する数値・文字列。-9223372036854775808 から
+ 9223372036854775807 
(符号付き整数)
ArgumentException
ArgumentOutOfRangeException
FormatException
InvalidCastException
OverflowException

構文

変数 = Convert.Toint64(変換の対象)

ToDecimal:Decimal型変換

指定した値をDecimalの数値に変換する。DateTime、Char型を引数にセットした場合は、例外が発生する。それ以外の型は基本的に変換可能である。

戻り値引数範囲例外
Decimal(10進)変換する数値・文字列。0~+/-79,228,162,514,264,337,593,543,950,335
(小数点なし)(正負の値)
0~+/-7.9228162514264337593543950335
(小数点以下28桁)
0 以外の最小値は
+/-0.0000000000000000000000000001 (+/-1E-28)
有効桁数28~29桁
FormatException
InvalidCastException
OverflowException

構文

変数 = Convert.ToDecimal(変換の対象)

サンプルコード

Dim decX As Decimal = 0

'整数型宣言
Dim intX As Integer = 123
decX = Convert.ToDecimal(intX)
Console.WriteLine("Integer > Decimal型の値:" & decX.ToString())

Dim lngX As Long = 123
decX = Convert.ToDecimal(lngX)
Console.WriteLine("Long    > Decimal型の値:" & decX.ToString())

'浮動小数点数型宣言
Dim douX As Double = 123.254
decX = Convert.ToDecimal(douX)
Console.WriteLine("Double  > Decimal型の値:" & decX.ToString())

'文字列型宣言
Dim strX As String = "123.5"
decX = Convert.ToDecimal(strX)
Console.WriteLine("String  > Decimal型の値:" & decX.ToString())

'boolean型宣言
Dim bolX As Boolean = False
decX = Convert.ToDecimal(bolX)
Console.WriteLine("boolean  > Decimal型の値:" & decX.ToString())

'例外パターン
'Console.WriteLine("例外 > Decimal型の値:" & Convert.ToDecimal(".NET").ToString)
'Console.WriteLine("例外 > Decimal型の値:" & Convert.ToDecimal("2020/04/01").ToString)
'Console.WriteLine("例外 > Decimal型の値:" & Convert.ToDecimal("123").ToString)
'Console.WriteLine("例外 > Decimal型の値:" & Convert.ToDecimal("79228162514264337593543950336").ToString)

ToDouble:Double型変換

指定した値を倍精度浮動小数点数に変換する。DateTime型、Char型を引数にセットした場合は、例外発生する。

戻り値引数変換範囲例外
Double変換する数値・文字列。-1.79769313486232 e308 から+1.79769313486232 e308FormatException
InvalidCastException
OverflowException

構文

変数 = Convert.Toint64(変換の対象)

サンプルコード

Dim dblX As Double = 0

'整数型宣言
Dim intX As Integer = 123
dblX = Convert.ToDouble(intX)
Console.WriteLine("Integer > Double型の値:" & dblX.ToString())

'単精度浮動小数点数宣言
Dim douX As Single = 3.402823
dblX = Convert.ToDouble(douX)
Console.WriteLine("Single  > Double型の値:" & dblX.ToString())

'10進数型宣言
Dim decX As Decimal = 123
dblX = Convert.ToDouble(decX)
Console.WriteLine("Decimal > Double型の値:" & dblX.ToString())

'文字列型宣言
Dim strX As String = "123.5556"
dblX = Convert.ToDouble(strX)
Console.WriteLine("String  > Double型の値:" & dblX.ToString())

'boolean型宣言
Dim bolX As Boolean = False
dblX = Convert.ToDouble(bolX)
Console.WriteLine("Boolean > Double型の値:" & dblX.ToString())
'丸め
Console.WriteLine("丸め    > Double型の値:" & Convert.ToDouble("1.79769313486232333333").ToString)

'例外パターン
'Console.WriteLine("例外    > Double型の値:" & Convert.ToDouble(".NET").ToString)
'Console.WriteLine("例外    > Double型の値:" & Convert.ToDouble("2020/04/01").ToString)
'Console.WriteLine("例外    > Double型の値:" & Convert.ToDouble("123").ToString)

ToSingle:Single型変換

指定した値を単精度浮動小数点数に変換する。DateTime型、Char型を引数にセットした場合は、例外発生する。

戻り値引数変換範囲例外
Single変換する数値・文字列。-3.402823 e38 から+3.402823 e38FormatException
InvalidCastException
OverflowException

構文

変数 = Convert.ToSingle(変換の対象)

ToDateTime:DateTime型変換

指定した値をDateTimeに変換する。引数に文字列以外の変換はサポートされていない。

戻り値引数範囲例外
DateTime日付と時刻の文字列形式。0 から 255FormatException
InvalidCastException

構文

変数 = Convert.ToDateTime(変換の対象)

サンプルコード

Dim dtmX As DateTime = Nothing

'文字列型宣言
Dim strX As String = "2020/01/01"
dtmX = Convert.ToDateTime(strX)
Console.WriteLine("日付    > DateTime型の値:" & dtmX.ToString())


'文字列型宣言
Dim strX2 As String = "2020/01/01 10:15:01"
dtmX = Convert.ToDateTime(strX2)
Console.WriteLine("日時    > DateTime型の値:" & dtmX.ToString())


'文字列型宣言
Dim strX3 As String = "s55.01.02"
dtmX = Convert.ToDateTime(strX3)
Console.WriteLine("和暦    > DateTime型の値:" & dtmX.ToString())

'例外パターン
Console.WriteLine("例外    > DateTime型の値:" & Convert.ToDateTime(".NET").ToString)
Console.WriteLine("例外    > DateTime型の値:" & Convert.ToDateTime(2020101).ToString)

ToChar:Char型変換

指定した値をUnicode文字に変換する。Single型、Double型、Decimal型、DateTime型、Boolean型を引数にセットすると例外が発生する。

戻り値引数変換範囲例外
Charオブジェクト-3.402823 e38 から+3.402823 e38FormatException
InvalidCastException
OverflowException

構文

変数 = Convert.ToChar(変換の対象)

サンプルコード

Dim chrX As Char = Nothing

'文字列型宣言
Dim strX As String = "1"
chrX = Convert.ToChar(strX)
Console.WriteLine("数字   > Char型の値:" & chrX.ToString())

'文字列型宣言
Dim strX2 As String = "Z"
chrX = Convert.ToChar(strX2)
Console.WriteLine("アルファベット > Char型の値:" & chrX.ToString())

'例外パターン
'Console.WriteLine("例外   > Char型の値:" & Convert.ToChar(".NET").ToString)
'Console.WriteLine("例外   > Char型の値:" & Convert.ToChar(2020101).ToString)

ToString:String型変換

指定した値を、それと等価なString形式に変換する。

戻り値引数例外
Charすべて型ArgumentException

構文

変数 = Convert.ToString(変換の対象)

サンプルコード

Dim strX As String = ""

'整数型宣言
Dim shoX As Short = 123
strX = Convert.ToString(shoX)
Console.WriteLine("Short   > String型の値:" & strX)

Dim intX As Integer = 123
strX = Convert.ToString(intX)
Console.WriteLine("Integer > String型の値:" & strX)

Dim lngX As Long = 123
strX = Convert.ToString(lngX)
Console.WriteLine("Long    > String型の値:" & strX)

'浮動小数点型宣言
Dim douX As Double = 123.254
strX = Convert.ToString(douX)
Console.WriteLine("Double  > String型の値:" & strX)

'10進数型宣言
Dim decX As Decimal = 123
strX = Convert.ToString(decX)
Console.WriteLine("Decimal > String型の値:" & strX)

'boolean型宣言
Dim bolX As Boolean = False
strX = Convert.ToString(bolX)
Console.WriteLine("Boolean > String型の値:" & strX)

CType関数

任意の式を、指定されたデータ型、オブジェクト、構造体、クラス、またはインターフェイスに明示的に変換し、その結果を返します。インラインコンパイルされるため、実行速度が速い。

構文

変数 = CType(式,変換先の型)

サンプルコード

Dim intX As Integer
Dim objX As Object = 123.3

Try

   intX = CType(objX, Integer)

   Console.WriteLine("Integer型:" & intX.ToString)


Catch ex As Exception


End Try

DirectCast演算子

実装または、継承関係があるオブジェクトを別の型へキャストを行います。また、 Object 間で変換を行う場合、CType よりも多少パフォーマンスが向上する可能性がある。

一方の型が他方の型を継承または実装する必要がある。互換及び継承関係でない場合は例外が発生する。

構文

変数 = DirectCast(式,変換先の型)

サンプルコード

Sub ControlClicked(ByVal sender As Object, ByVal e As EventArgs)
  If TypeOf sender Is Button Then
    Dim b As Button = DirectCast(sender, Button)
  End If
End Sub

TryCast演算子

実装または、継承関係があるオブジェクトを別の型へキャストを行います。キャストできない場合は、Nothingを返します。(DirectCast演算子と異なる点)例外が発生しないので、事前に型変換できるか調べる必要がありません。

実装または、継承関係があるオブジェクトのキャストを行います。構造体(Integer,Byte等)へのキャストなどには使うことはできません。

構文

変数 = TryCast(式,変換先の型)

サンプルコード

Sub ControlClicked(ByVal sender As Object, ByVal e As EventArgs)
Dim b As Button = TryCast(sender, Button)
End Sub

Parse・TryParse :文字列から変換

Parse・TryParse は、文字列(string)から数値に変換する。ParseとTryParseの違いは、 文字列が無効である場合、Parseでは例外がスローされるが、TryParseではfalseが返されます。

Parseメソッドを呼び出す場合は、「FormatException」の例外をキャッチして処理する必要があります。空白について、文字列前後は無視されるが、それ以外はエラーとなる。

Convertメソッドを使用する方がより便利である。

構文

変数 = 変更後の型.Parse(文字列)
変更後の型.TryParse(文字列,変数)

TryParseサンプルコード

Dim bytX As Byte
Dim shoX As Short
Dim intX As Integer
Dim lonX As Long
Dim douX As Double
Dim decX As Decimal
Dim bolX As Boolean
Dim datX As Date

Byte.TryParse("123", bytX)
Short.TryParse("1234", shoX)
Integer.TryParse("12345", intX)
Long.TryParse("123456", lonX)
Double.TryParse("123.12", douX)
Decimal.TryParse("123.2", decX)
Boolean.TryParse("true", bolX)
Date.TryParse("2020/01/01", datX)

Console.WriteLine("Byte型:" & bytX.ToString)
Console.WriteLine("Short型:" & shoX.ToString)
Console.WriteLine("Integer型:" & intX.ToString)
Console.WriteLine("Long型:" & lonX.ToString)
Console.WriteLine("Double型:" & douX.ToString)
Console.WriteLine("Decimal型:" & decX.ToString)
Console.WriteLine("Boolean型:" & bolX.ToString)
Console.WriteLine("Date型:" & datX.ToString)

Parseサンプルコード

Dim bytX As Byte
Try
    bytX = Byte.Parse("123")
    Console.WriteLine("Byte型:" & bytX.ToString)
Catch ex As Exception

End Try