更新 :
2008 年 7 月
型変換で考慮しなければならない重要な点は、変換結果が変換先データ型の範囲内に入るかどうかということです。拡大変換では、変換元データのすべての値を含むことができるデータ型に値が変更されます。縮小変換では、値の一部を保持できない可能性があるデータ型に変更されます。
次の表は、標準の拡大変換を示しています。
データ型
|
拡大変換後のデータ型 1
|
|---|
SByte
|
SByte, Short, Integer, Long, Decimal, Single, Double
|
バイト
|
Byte, Short, UShort, Integer, UInteger, Long, ULong, Decimal, Single, Double
|
短整数型 (Short)
|
Short, Integer, Long, Decimal, Single, Double
|
ushort
|
UShort, Integer, UInteger, Long, ULong, Decimal, Single, Double
|
整数
|
Integer, Long, Decimal, Single, Double2
|
UInteger
|
UInteger, Long, ULong, Decimal, Single, Double 2
|
長整数型 (Long)
|
Long, Decimal, Single, Double 2
|
ulong
|
ULong, Decimal, Single, Double 2
|
10 進数
|
Decimal, Single, Double 2
|
単精度浮動小数点数型
|
Single, Double
|
倍精度浮動小数点数型
|
Double
|
すべての列挙型 (Enum)
|
基になる整数型および拡大変換の基になる任意の型
|
文字型 (Char)
|
Char, String
|
Char 配列
|
Char 配列、String
|
任意の型
|
オブジェクト
|
すべての派生型
|
3 を派生するすべての基本型
|
任意の型
|
実装するすべてのインターフェイス
|
なし
|
すべてのデータ型またはオブジェクト型
|
1 定義上、すべてのデータ型は自動的に拡大されます。
2 Integer、UInteger、Long、ULong、または Decimal から Single または Double への変換は、精度が失われる結果となる可能性がありますが、桁数が失われることはありません。この意味で考えると、情報の損失は起こりません。
3 派生型からその基本型への変換は拡大変換になります。派生型には基本型のすべてのメンバが含まれるため、基本型のインスタンスとして扱うことができるためです。逆に、基本型では派生型で定義されたメンバが含まれていません。
拡大変換は、実行時には常に正常に行われ、データ消失が発生することはありません。Option Strict ステートメントで型チェック スイッチを On または Off に設定して、拡大変換を常に暗黙的に実行できます。
標準の縮小変換は次のとおりです。
前の表で示した拡大変換の逆方向 (それ自体に拡大変換する場合の型を除く)
ブール型 (Boolean) と任意の数値型の間の相互変換
任意の数値型から任意の列挙型への変換 (Enum)
文字列型と、任意の数値型、Boolean、または日付型の間の相互変換
データ型またはオブジェクト型の、その派生型への変換
縮小変換は、実行時に常に正しく実行されるとは限りません。したがって失敗またはデータを消失する可能性があります。変換先のデータ型で変換対象の値を受け入れることができない場合に、エラーが発生します。たとえば、数値変換ではオーバーフローが発生することがあります。コンパイラは、Option Strict ステートメントで型チェック スイッチが Off に設定されていない限り、暗黙的な縮小変換の実行を許可しません。
縮小変換を使用するタイミング
変換元の値を変換先のデータ型に変換でき、エラーまたはデータの消失が発生しないことがわかっている場合に、縮小変換を使用します。たとえば、文字列型 (String) に "True" または "False" のいずれかが含まれることが明らかな場合は、CBool キーワードを使用してブール型 (Boolean) に変換できます。
拡大変換は常に正しく実行されるため、例外をスローすることはありません。縮小変換が失敗すると、通常は次の例外をスローします。
クラスまたは構造体で CType 関数を定義して、そのクラスまたは構造体の間の変換演算子として機能させると、その CType は適切と見なされる例外をスローできます。さらに、その CType は Visual Basic 関数または .NET Framework メソッドを呼び出して、さまざまな例外を順番にスローできます。
処理手順
概念
参照
その他の技術情報
日付
|
履歴
|
理由
|
|---|
2008 年 7 月
|
縮小変換および For Each…Next に関する説明を追加。
|
カスタマ フィードバック
|