クリックして評価とフィードバックをお寄せください
MSDN
MSDN ライブラリ
Visual Studio 2008
Visual Studio
Visual Basic
Visual Basic 言語の機能
Visual Basic における型変換
 拡大変換と縮小変換

  低帯域幅での表示をオンにする
このページは次のバージョンについて記述しています。
Microsoft Visual Studio 2008/.NET Framework 3.5

その他のバージョンについては、以下の情報を参照してください。
Visual Basic のプログラミング ガイド
拡大変換と縮小変換

更新 : 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 IntegerUIntegerLongULong、または Decimal から Single または Double への変換は、精度が失われる結果となる可能性がありますが、桁数が失われることはありません。この意味で考えると、情報の損失は起こりません。

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

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

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

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

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

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

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

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

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

k1e94s7e.alert_note(ja-jp,VS.90).gifメモ :

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

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

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

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

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

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

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

日付

履歴

理由

2008 年 7 月

縮小変換および For Each…Next に関する説明を追加。

カスタマ フィードバック

コミュニティ コンテンツ   コミュニティ コンテンツとは
新しいコンテンツの追加 RSS  注釈
Option Strict On でも暗黙的な縮小変換が行われることがあります      biac   |   編集   |   履歴の表示

Option Strict On を指定したとき、 コンパイラは原則として暗黙的な縮小変換の実行を許可しませんが、 C# とは異なり、 いくつかの例外がありますので注意してください。
次の例では、 String から Integer への縮小変換が実行されます。 ( 4番目の "abc" は縮小変換に失敗し、 実行時エラーになります。 )

For Each num As Integer In New String() {"01", "2E0", "+3.0", "abc"}
Call Console.Write("{0}, ", num)
Next

参照 → Connet FeedbackID=338198 https://connect.microsoft.com/VisualStudioJapan/feedback/ViewFeedback.aspx?FeedbackID=338198

Processing
© 2009 Microsoft Corporation. All rights reserved. 使用条件  |  商標  |  プライバシー
Page view tracker