型変換とは
C#では型を厳密に区別します。以下のようなコードはコンパイルエラーになります。
int num = 100;
string str = num;// コンパイルエラー(型intをstringに暗黙的に変換できません)
暗黙的な変換
特に宣言なしで型変換が出来るのは数値型から数値型の場合に限られます。
例えば、整数型から浮動整数点型に変換する場合などに用いられます。
int num = 100;//整数型で宣言した
double numD = num;//その値を浮動小数点型に変換した。
明示的な変換(キャスト)
一方、広い型から狭い型への代入は内容に関わらず以下の様にエラーになります。
int num = 123;
byte b = num; // コンパイルエラー(型intをbyteに暗黙的に変換できません)
但し、明らかに値が狭い型に格納される場合に限ってキャストをすることで明示的に型変換をすることが出来ます。
int num = 12;
byte b = (byte)num;
変換する変数の前に変換したい型を()で囲んでキャストを宣言します。
このようにすることにより変換することが出来ます。これを明示的変換と言います。
文字列⇔数値の変換
今までは数値同士の型変換の話でしたが、文字列が数字のみの場合、数値として扱いたい場合があります。その場合にどうしたらいいでしょう。
文字列⇒数値の変換
数値型のParseメソッドを呼び出すことで行う事が出来ます。
string ex = "123";
int num = int.Parse(ex);//数値で123に変換される
ところで、文字列変数に数値に変換される値が入っているとは限りません。
string ex = "123+45"
int ret = int.Parse(ex);
//これは123+45を計算した値をint型に変換するのではなく文字列として扱われるので実行時に例外が発揮します。
それを避けるために数値型にTryParseメソッドが用意されています。
string ex1 = "123";
bool ret1 = int.TryParse(ex1,out int tmp1);//es1は数値に変換できるので戻り値にtrueが帰ってくる
string ex2 = "123+45";
bool ret2 = int.TryParse(ex2,out int tmp2);//ex2は数値に変換できないので戻り値にfalseが帰ってくる
TryParseメソッドは第1引数が数値にParseが行えるかどうかを判定し、第2引数に変換に成功した数値を代入するものです。第2引数に「out」がついているのは変換結果を第2引数に宣言した変数に代入してくれと言う意味です。変換に失敗(戻り値がfalse)の場合は第2引数に変数の初期値である0が代入されます。
確実に値に数値が入っている事が保証されている場合でもTryParseメソッドを用いた方が一貫性があっていいでしょう。
数値⇒文字列の変換
数値から文字列への変換は数値型のToStringメソッドを使用します。
int i=0;
double d = 1.23
Console.WriteLine(i.ToString()); //結果13
Console.WriteLine(d.ToString()); //結果1.23
まとめ
型変換でよく起きるのが、数値同士の型変換。扱う数値の幅が少ない方から大きい方だと特に何事もなく変換できますが、大きい方から少ない方への変換ですと、明示的に変換をしていますよと言うことをキャストをしている(変換先の型を明示する)必要があります。
文字列から数字型への変換は必要な数字の桁に対してParse()メソッドで変換をするか、TryParse()メソッドを使用するかどちらかで行います。
数値型から文字列への変換は数値型にToString()メソッドを用いて変換します。
コメント