.NET Visual C#言語入門 > 型変換(Cast:キャスト)
のぶ亭『プログラミングの相談窓口』 … 様々なプログラミング問題を個別対応致します |
型変換(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
- int、uint、long から floatへの変換、long
から double への変換では、
有効桁数が桁落ちすることがありますが、絶対値は損なわれません。 - char 型への暗黙の型変換はありません。
- 浮動小数点型と decimal 型の間には、暗黙の型変換はありません。
- int 型の定数式は、定数式の値が変換後の型の範囲内である場合、sbyte、byte、short、ushort、uint、または 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 値に丸められます。