CodeGym /コース /C# SELF /データ型の変換について

データ型の変換について

C# SELF
レベル 2 , レッスン 3
使用可能

1. なんで型変換が必要なの?

C#はガチガチの型付き言語なんだ。もしパソコンに「数字用の箱」があったとして、そこにテキストを無理やり突っ込もうとするのは、フォークをUSBポートに挿そうとするのと同じくらい無理ゲー。コンパイラは絶対に許してくれないよ!😡

でも、現実ではいろんなデータ型を同時に扱うことが多いよね。たとえば、数字が入ってる文字列を持ってる場合とか。こういうときに型変換(または変換)が必要になるんだ。

例を見てみよう。たとえば、ユーザー数を保存したいとき:

int a = 1;
int b = "2";
int c = "san";

コンパイラはすぐに「おいおい、俺を誰だと思ってるんだ?文字列を数字に自動で変換なんてできないぞ、自分でやってくれ」って怒ってくる。

C#にはいくつか変換のやり方があって、それぞれメリット・デメリットや、よくある落とし穴があるんだ。

2. intstring に変換する

仕事してると、数字を文字列として使いたい場面がよくあるよね。たとえば、画面に表示したり、ファイルに保存したり、ネットワークで送ったり、テキストとくっつけたりとか。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型になるんだ。

重要! 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()はかなり賢いよ。

コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION