1. なんで型変換が必要なの?
C#はガチガチの型付き言語なんだ。もしパソコンに「数字用の箱」があったとして、そこにテキストを無理やり突っ込もうとするのは、フォークをUSBポートに挿そうとするのと同じくらい無理ゲー。コンパイラは絶対に許してくれないよ!😡
でも、現実ではいろんなデータ型を同時に扱うことが多いよね。たとえば、数字が入ってる文字列を持ってる場合とか。こういうときに型変換(または変換)が必要になるんだ。
例を見てみよう。たとえば、ユーザー数を保存したいとき:
int a = 1;
int b = "2";
int c = "san";
コンパイラはすぐに「おいおい、俺を誰だと思ってるんだ?文字列を数字に自動で変換なんてできないぞ、自分でやってくれ」って怒ってくる。
C#にはいくつか変換のやり方があって、それぞれメリット・デメリットや、よくある落とし穴があるんだ。
2. int を string に変換する
仕事してると、数字を文字列として使いたい場面がよくあるよね。たとえば、画面に表示したり、ファイルに保存したり、ネットワークで送ったり、テキストとくっつけたりとか。C#にはそれ用の方法がいくつかあって、状況によって使い分けると便利だよ。
ToString() 関数
これが一番メジャーでよく使うやり方:
int number = 42;
string str = number.ToString(); // str == "42"
ToString()は、その型で普通に使われる形で数字を文字列にしてくれる。
文字列補間 ($"...")
最近のやり方で、変数を文字列に埋め込むのに超便利:
int number = 42;
string str = $"数字: {number}";
文字列補間は、埋め込んだ値に自動でToString()を呼んでくれるよ。
複数の変数を組み合わせたり、フォーマット指定もできる:
int number = 42;
string str = $"{number:D5}"; // "00042" — 5桁でゼロ埋め
空文字との連結
古いけど、今でも使える方法:
int number = 42;
string str = number + "";
シンプルな場合はこれで十分だけど、コード読む人にはちょっと分かりにくいかも。
3. 暗黙的な文字列変換
さっきも言ったけど、C#の開発者たちは、C#の全ての変数・オブジェクト・式をstring型に変換できるようにしてくれてるんだ。
しかも、string型と他の型を足し算すると、自動的に変換される。例を見てみよう:
int a = 5;
string name = "アーニャ" + a; // nameは"アーニャ5"になる
int a = 5;
string city = a + "New York" + a; // cityは"5New York5"になる
int number = 10;
string code = "Yo";
string message = "Hello! " + number + code; // messageは"Hello! 10Yo"になる
この3つの例、int型とstring型を普通に足してるけど、結果は必ずstring型になるんだ。
例を見てみよう:
int a = 5;
string name = "1" + a; // nameは"15"になる
int a = 5;
string city = a + "9" + a; // cityは"595"になる
int number = 10;
string code = "10";
string message = "" + number + code; // messageは"1010"になる
足し算は左から右に順番に行われるから、結果がちょっと意外になることも。例:
int a = 5;
string name = a + a + "1" + a; // nameは"1015"になる
実行順序は: ((a + a) + "1") + a
4. 文字列を数字に変換する
C#で数字を文字列に変換したいなら、空文字と足すだけでOK:
string str = "" + 数字;
じゃあ、文字列を数字に変換したいときは?うーん、どんな文字列でも数字にできるわけじゃない。でも、文字列が数字だけでできてるなら大丈夫。そのためにint型には特別な関数Parse()があるよ。
コマンドはこんな感じ:
int x = int.Parse("moji-retsu")
ここでint xは整数型の変数xの宣言で、moji-retsuは数字だけでできた文字列(数字の文字列)だよ。
例を見てみよう:
string str = "123";
int number1 = int.Parse(str); // number1は123になる
int number2 = int.Parse("321"); // number2は321になる
int number3 = int.Parse("321" + 0); // number3は3210になる
int number4 = "321"; // コンパイルできない: 変数はint型なのに値はstring型
マイナスの値でも大丈夫:int.Parse()はかなり賢いよ。
GO TO FULL VERSION