Top > .NET Visual C#言語入門 > 型変換(Cast:キャスト)
プログラム構造 列挙型(enum) コンストラクタ・デストラクタ
スケルトン 配列 メソッド
クラス内の記述構成 構造体 プロパティ
HalloWorld 修飾子 静的クラスと静的メンバ
コマンドライン引数 プリプロセッサ ディレクティブ フィールド
コメント 例外と例外処理 演算子のオーバーロード
ステートメント(文) 可変個引数リスト(params) イベント(割り込み)
式(演算子) 名前空間 デリゲート
変数とデータ型 クラスとオブジェクト インデクサ
型変換(キャスト) クラス(class) デリゲート&イベント発生と受信サンプル
定数(Const/Readonly) 部分クラス定義  
文字列(string) 継承  

型変換(Cast:キャスト)

変数には型があります。複数の異なる型どうしの変数を使用(メソッドの呼び出し、代入式、演算式)する場合、型をそろえる必要があります。それを型変換と呼びます。

型変換には、(数値型の場合)暗黙に型を変換する機能が組み込まれていますが、全ての型に対して行うことはできません。その場合、コンパイル時にワーニングで通知されます。

このワーニングに対する対応として、明示的な型変換(キャスト)で回避します。

暗黙の型変換(数値型)

異なる数値型の変数を組み合わせて使用する場合、暗黙の型変換が行われます。暗黙の型変換は、メソッドの呼び出しや代入ステートメント、演算式などの多くの状況で発生します。

ルールは、 「大きいサイズの型に変換する」です。以下に、変換前の型が変換できる型の一覧を示します。下記の組み合わせ以外での変換は、明示的な型変換を行う必要があります。

変換前 変換後
sbyte short、int、long、float、double、decimal
byte short、ushort、int、uint、long、ulong、float、double、decimal
short int、long、float、double、decimal
ushort int、uint、long、ulong、float、double、decimal
int long、float、double、decimal
uint long、ulong、float、double、decimal
long float、double、decimal
char ushort、int、uint、long、ulong、float、double、decimal
float double
ulong float、double、decimal
  • intuintlong から floatへの変換、long から double への変換では、
    有効桁数が桁落ちすることがありますが、絶対値は損なわれません。
  • char 型への暗黙の型変換はありません。
  • 浮動小数点型と decimal 型の間には、暗黙の型変換はありません。
  • int 型の定数式は、定数式の値が変換後の型の範囲内である場合、sbytebyteshortushortuint、または ulong に変換できます。

明示的な型変換(数値型)

暗黙の型変換が行われない場合、コンパイルエラーが発生します。その際は、キャスト式を使用して明示的に型の変換を行う必要があります。キャスト式により、任意の型を他の 型に変換します。

変換前 変換後
sbyte byte、ushort、uint、ulong、char
byte Sbyte、char
short sbyte、byte、ushort、uint、ulong、char
ushort sbyte、byte、short、char
int sbyte、byte、short、ushort、uint、ulong、char

uint

sbyte、byte、short、ushort、int、char
long sbyte、byte、short、ushort、int、uint、ulong、char
ulong sbyte、byte、short、ushort、int、uint、long、char
char sbyte、byte、short
float sbyte、byte、short、ushort、int、uint、long、ulong、char、decimal
double sbyte、byte、short、ushort、int、uint、long、ulong、char、float、decimal
decimal sbyte、byte、short、ushort、int、uint、long、ulong、char、float、double
  • 明示的な数値変換によって、有効桁数が桁落ちしたり、例外がスローされる場合があります。
  • decimal 値を整数型に変換すると、値は一番近い整数値に丸められます。
    結果の整数値が変換先の型の範囲を超えた場合は、OverflowException がスローされます。
  • double 値または float 値を整数型に変換すると、値が切り捨てられます。
    整数値が、変換後の値の範囲を超えた場合は、オーバーフロー チェック コンテキストに従います。
    checked コンテキストでは、OverflowException がスローされます。
    これに対して、unchecked コンテキストでは、変換後の型の未指定値に変換されます。
  • double から float への変換では、double 値は最も近い float 値に丸められます。
    double
    値が、変換後の型の範囲外であるため格納できない場合は、0 または無限大になります。
  • float または double から decimal への変換では、変換前の値が decimal 表記に変換され、必要に応じて小数第 28 位までの近似値に丸められます。変換元の値に応じて、次のいずれかが生じる場合があります。
    • 変換元の値が小さすぎて decimal で表すことができない場合、結果は 0 になります。
    • 変換元の値が非数 (NaN)、無限大、または大きすぎて decimal で表すことができない場合は、OverflowException がスローされます。
  • decimal から float または double への変換では、decimal 値は最も近い double 値または float 値に丸められます。

▲ページトップに戻る

【本を読んでもよくらからない】 … 個別指導でわかりやすくお教えします