Share via


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

型変換で考慮しなければならない重要な点は、変換結果が変換先データ型の範囲内に入るかどうかということです。 拡大変換では、変換元データのすべての値を含むことができるデータ型に値が変更されます。 縮小変換では、値の一部を保持できない可能性があるデータ型に変更されます。

拡大変換

次の表は、標準の拡大変換を示しています。

データ型

拡大変換後のデータ型 1

SByte

SByte, Short, Integer, Long, Decimal, Single, Double

Byte

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

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

Decimal

Decimal, Single, Double 2

Single

Single, Double

Double

Double

すべての列挙型 (Enum)

基になる整数型および拡大変換の基になる任意の型

Char

Char, String

Char 配列

Char 配列、String

任意の型

Object

すべての派生型

派生元の基本型 3

任意の型

実装しているインターフェイス

Nothing

任意のデータ型またはオブジェクト型

1 定義上、すべてのデータ型は自動的に拡大されます。

2 Integer、UInteger、Long、ULong、または Decimal から Single または Double への変換は、精度が失われる結果となる可能性がありますが、桁数が失われることはありません。 この意味で考えると、情報の損失は起こりません。

3 派生型からその基本型への変換は拡大変換になります。 派生型には基本型のすべてのメンバーが含まれるため、基本型のインスタンスとして扱うことができるためです。 逆に、基本型では派生型で定義されたメンバーが含まれていません。

拡大変換は、実行時には常に正常に行われ、データ消失が発生することはありません。 Option Strict ステートメントで型チェック スイッチを On または Off に設定して、拡大変換を常に暗黙的に実行できます。

縮小変換

標準の縮小変換は次のとおりです。

  • 前の表で示した拡大変換の逆方向 (それ自体に拡大変換する場合の型を除く)

  • ブール型 (Boolean) と任意の数値型の間の相互変換

  • 任意の数値型から任意の列挙型への変換 (Enum)

  • 文字列型と、任意の数値型、Boolean、または日付型の間の相互変換

  • データ型またはオブジェクト型の、その派生型への変換

縮小変換は、実行時に常に正しく実行されるとは限りません。したがって失敗またはデータを消失する可能性があります。 変換先のデータ型で変換対象の値を受け入れることができない場合に、エラーが発生します。 たとえば、数値変換ではオーバーフローが発生することがあります。 コンパイラは、Option Strict ステートメントで型チェック スイッチが Off に設定されていない限り、暗黙的な縮小変換の実行を許可しません。

注意

For Each…Next コレクション内の要素からループ制御変数への変換に対して縮小変換エラーが抑制されます。 詳細および例については、「For Each...Next ステートメント (Visual Basic)」の「縮小変換」を参照してください。

縮小変換を使用するタイミング

変換元の値を変換先のデータ型に変換でき、エラーまたはデータの消失が発生しないことがわかっている場合に、縮小変換を使用します。 たとえば、文字列型 (String) に "True" または "False" のいずれかが含まれることが明らかな場合は、CBool キーワードを使用してブール型 (Boolean) に変換できます。

変換中の例外

拡大変換は常に正しく実行されるため、例外をスローすることはありません。 縮小変換が失敗すると、通常は次の例外をスローします。

  • InvalidCastException — 2 つの型の間で変換が定義されていない場合

  • OverflowException — (整数型の場合のみ) 変換された値が対象の型にしては大きすぎる場合

クラスまたは構造体で CType 関数 (Visual Basic)を定義して、そのクラスまたは構造体の間の変換演算子として機能させると、その CType は適切と見なされる例外をスローできます。 さらに、その CType は Visual Basic 関数または .NET Framework メソッドを呼び出して、さまざまな例外を順番にスローできます。

参照

処理手順

方法: Visual Basic でオブジェクトを別の型に変換する

参照

データ型の概要 (Visual Basic)

データ型変換関数 (Visual Basic)

概念

Visual Basic におけるデータ型

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

変換時の値の変化 (Visual Basic)

文字列とその他の型との変換 (Visual Basic)

配列の変換 (Visual Basic)

Visual Basic での型宣言を省略したプログラミング

その他の技術情報

Visual Basic における型変換