C#でintとstringを変換する方法|Parse・ToString・TryParseの使い分けを初心者向けに解説

はじめに

C#でプログラムを書いていると、intstringの変換は非常によく登場します。

たとえば、ユーザーが入力した「123」という文字列を計算に使いたい場合は、stringからintへ変換する必要があります。反対に、計算結果の数値を画面に表示したり、メッセージの中に埋め込んだりしたい場合は、intからstringへ変換します。

C#では、intstringを変換する代表的な方法として、次の3つがあります。

C#
ToString()
int.Parse()
int.TryParse()

それぞれ役割が異なるため、場面に応じて使い分けることが大切です。

この記事では、C#でintstringを変換する方法について、ToStringParseTryParseの違いや使い分けを初心者向けにわかりやすく解説します。

1. C#のintとstring変換でできること

C#のintstring変換を理解するには、まず「数値として扱うのか」「文字として扱うのか」を意識することが重要です。

同じ123でも、int型の123string型の"123"は別物です。

C#
int number = 123;
string text = "123";

見た目は似ていますが、numberは計算に使える数値、textは文字列として扱われます。

1-1. int型とstring型の違い

int型は整数を扱うための型です。足し算、引き算、掛け算、割り算などの計算に使えます。

C#
int a = 10;
int b = 20;

int result = a + b; // 30

一方、string型は文字列を扱うための型です。数字に見える文字でも、string型であれば文字として扱われます。

C#
string a = "10";
string b = "20";

string result = a + b; // "1020"

この例では、"10""20"を足しているように見えますが、実際には文字列の連結になります。そのため結果は"30"ではなく"1020"です。

つまり、計算したいならint、文字として表示したいならstringを使います。

1-2. intからstringへ変換する場面

intからstringへ変換する場面は、主に数値を表示したいときです。

たとえば、次のようなケースがあります。

C#
int age = 25;
string message = "年齢は" + age.ToString() + "歳です。";

画面に表示するメッセージ、ログ出力、ファイルへの書き込み、Webページへの表示などでは、数値を文字列として扱うことがよくあります。

また、数値を決まった桁数で表示したい場合にもstringへの変換を使います。

C#
int id = 7;
string code = id.ToString("D3"); // "007"

このように、intからstringへの変換は「数値を文字として見せる」ために使います。

1-3. stringからintへ変換する場面

stringからintへ変換する場面は、文字列として受け取った値を計算に使いたいときです。

たとえば、コンソール入力は基本的にstringとして取得されます。

C#
string input = Console.ReadLine();

ユーザーが"100"と入力しても、その時点では文字列です。計算に使うにはintへ変換する必要があります。

C#
int number = int.Parse(input);
int result = number * 2;

Webフォーム、アプリの入力欄、CSVファイル、設定ファイル、APIから受け取った値なども、最初はstringとして扱うことが多いです。

そのような値を計算や比較に使う場合、stringからintへの変換が必要になります。

1-4. 変換方法の全体像:ToString・Parse・TryParse

C#でintstringを変換する代表的な方法は、次の3つです。

C#
int number = 123;

// intからstringへ変換
string text = number.ToString();

// stringからintへ変換
int value1 = int.Parse("123");

// 変換できるか確認しながらstringからintへ変換
bool success = int.TryParse("123", out int value2);

それぞれの役割は次のとおりです。

メソッド用途特徴
ToString()intstringに変換数値を文字列として表示したいときに使う
int.Parse()stringintに変換変換できない文字列だと例外が発生する
int.TryParse()stringを安全にintへ変換変換に失敗しても例外が発生しない

初心者のうちは、まず次のように覚えるとわかりやすいです。

C#
// int → string
ToString()

// string → int かつ必ず数字だと分かっている
int.Parse()

// string → int かつ数字かどうか分からない
int.TryParse()

2. intをstringに変換する方法

intstringに変換する場合、基本的にはToString()を使います。

C#では、数値を画面に表示したり、文字列と組み合わせたりするときに、自動的に文字列として扱われる場面もあります。ただし、明示的に変換したい場合はToString()を使うのが基本です。

2-1. ToStringを使った基本的な変換

intstringに変換する最も基本的な方法は、ToString()です。

C#
int number = 123;
string text = number.ToString();

Console.WriteLine(text);

実行結果は次のようになります。

C#
123

このとき、numberint型、textstring型です。

C#
int number = 123;
string text = number.ToString();

ToString()を使うことで、数値の123を文字列の"123"に変換できます。

2-2. 文字列連結でintをstringとして扱う方法

C#では、文字列とint+で連結すると、intは文字列として扱われます。

C#
int age = 25;
string message = "年齢は" + age + "歳です。";

Console.WriteLine(message);

実行結果は次のとおりです。

C#
年齢は25歳です。

この場合、ageに対して明示的にToString()を書いていませんが、文字列連結の中で自動的に文字列へ変換されます。

ただし、数値同士の足し算と文字列連結が混ざる場合は注意が必要です。

C#
int a = 10;
int b = 20;

Console.WriteLine("結果:" + a + b);

この結果は次のようになります。

C#
結果:1020

"結果:" + aの時点で文字列連結になり、その後のbも文字列として連結されるためです。

計算結果を表示したい場合は、先に計算します。

C#
Console.WriteLine("結果:" + (a + b));

実行結果は次のようになります。

C#
結果:30

2-3. 文字列補間でintを埋め込む方法

C#では、文字列補間を使うと、intを簡単に文字列の中へ埋め込めます。

C#
int age = 25;
string message = $"年齢は{age}歳です。";

Console.WriteLine(message);

実行結果は次のとおりです。

C#
年齢は25歳です。

文字列補間では、文字列の前に$を付け、埋め込みたい変数を{}で囲みます。

C#
$"年齢は{age}歳です。"

文字列連結よりも読みやすく、複数の値を埋め込むときにも便利です。

C#
string name = "田中";
int age = 25;

string message = $"{name}さんは{age}歳です。";

実務でもよく使われる書き方なので、初心者のうちから覚えておくと便利です。

2-4. 桁数指定や0埋めをして文字列に変換する方法

ToString()では、書式を指定して文字列に変換できます。

たとえば、数値を3桁で表示し、足りない桁を0で埋める場合は次のように書きます。

C#
int number = 7;
string text = number.ToString("D3");

Console.WriteLine(text);

実行結果は次のとおりです。

C#
007

"D3"は、整数を3桁で表示する指定です。

C#
int number1 = 7;
int number2 = 45;
int number3 = 123;

Console.WriteLine(number1.ToString("D3")); // 007
Console.WriteLine(number2.ToString("D3")); // 045
Console.WriteLine(number3.ToString("D3")); // 123

ID、商品コード、連番、ファイル名などを作るときに便利です。

C#
int fileNumber = 12;
string fileName = $"image_{fileNumber.ToString("D4")}.png";

Console.WriteLine(fileName);

実行結果は次のようになります。

C#
image_0012.png

文字列補間の中でも書式指定は使えます。

C#
int number = 7;
string text = $"{number:D3}";

Console.WriteLine(text); // 007

このように書くと、ToString("D3")よりもすっきり書ける場合があります。

2-5. intをstringに変換するときの注意点

intからstringへの変換は、stringからintへの変換に比べると失敗しにくいです。

C#
int number = 123;
string text = number.ToString();

このような基本的な変換でエラーになることはほとんどありません。

ただし、次の点には注意しましょう。

まず、ToString()した後の値は文字列です。計算にはそのまま使えません。

C#
int number = 100;
string text = number.ToString();

// text + 50 は数値計算ではなく文字列連結になる
Console.WriteLine(text + 50); // 10050

数値として計算したい場合は、int型のまま扱います。

C#
int number = 100;
Console.WriteLine(number + 50); // 150

また、桁数指定や書式指定をした文字列は、人が見やすい表示用の値です。後から再びintに戻す必要がある場合は、余計な文字を含めないようにしましょう。

C#
int price = 1200;
string text = price.ToString("N0"); // 1,200

"1,200"のようなカンマ付き文字列は、そのままint.Parse()すると設定によっては失敗することがあります。表示用と計算用の値は分けて考えるのが安全です。

3. stringをintに変換する方法

stringintに変換する場合、代表的な方法はint.Parse()です。

ただし、stringからintへの変換では、文字列の中身が本当に整数として解釈できるかどうかが重要です。

C#
string text = "123";
int number = int.Parse(text);

このように、文字列が正しい整数であれば変換できます。

一方で、"abc""12.3"のような文字列は、通常のint.Parse()では変換できません。

3-1. int.Parseを使った基本的な変換

int.Parse()は、文字列をintに変換するメソッドです。

C#
string text = "123";
int number = int.Parse(text);

Console.WriteLine(number);

実行結果は次のとおりです。

C#
123

変換後のnumberint型なので、計算に使えます。

C#
string text = "123";
int number = int.Parse(text);

int result = number + 10;

Console.WriteLine(result); // 133

"123"のように、文字列の中身が整数として正しい場合は問題なく変換できます。

3-2. int.Parseで変換できる文字列の条件

int.Parse()で変換できるのは、基本的に整数として解釈できる文字列です。

たとえば、次のような文字列は変換できます。

C#
int a = int.Parse("123");
int b = int.Parse("-123");
int c = int.Parse("+123");

前後に半角スペースがある場合も、通常は変換できます。

C#
int number = int.Parse(" 123 ");

Console.WriteLine(number); // 123

一方で、次のような文字列は変換できません。

C#
int.Parse("abc");
int.Parse("12abc");
int.Parse("12.3");
int.Parse("");

intは整数型なので、小数を表す"12.3"はそのままでは変換できません。

また、intには扱える範囲があります。C#のintは、通常-2147483648から2147483647までの整数を扱います。

C#
int.Parse("2147483647");  // OK
int.Parse("2147483648"); // OverflowException

範囲を超える文字列を変換しようとすると、エラーになります。

3-3. 空文字・null・数字以外をParseした場合のエラー

int.Parse()は、変換できない文字列を渡すと例外が発生します。

数字以外の文字列を渡した場合は、FormatExceptionが発生します。

C#
string text = "abc";
int number = int.Parse(text);

このコードは、"abc"を整数に変換できないためエラーになります。

空文字も変換できません。

C#
string text = "";
int number = int.Parse(text);

空文字は整数として解釈できないため、FormatExceptionになります。

nullを渡した場合も注意が必要です。

C#
string text = null;
int number = int.Parse(text);

この場合は、ArgumentNullExceptionが発生します。

つまり、int.Parse()は「必ず数値に変換できる」と分かっている文字列に対して使うのが基本です。

ユーザー入力のように、どんな文字が入るか分からない場合は、後で解説するint.TryParse()を使う方が安全です。

3-4. Convert.ToInt32を使った変換方法

stringからintへの変換には、Convert.ToInt32()を使う方法もあります。

C#
string text = "123";
int number = Convert.ToInt32(text);

Console.WriteLine(number);

実行結果は次のとおりです。

C#
123

Convert.ToInt32()も、文字列が整数として正しければintに変換できます。

C#
string text = "100";
int number = Convert.ToInt32(text);

Console.WriteLine(number + 50); // 150

ただし、数字ではない文字列を渡した場合は、int.Parse()と同じようにエラーになります。

C#
int number = Convert.ToInt32("abc");

この場合はFormatExceptionが発生します。

3-5. ParseとConvert.ToInt32の違い

int.Parse()Convert.ToInt32()は似ていますが、nullを扱うときに大きな違いがあります。

C#
string text = null;

int a = Convert.ToInt32(text);
Console.WriteLine(a); // 0

Convert.ToInt32(null)0を返します。

一方、int.Parse(null)は例外になります。

C#
string text = null;

int b = int.Parse(text); // ArgumentNullException

この違いは重要です。

変換方法"123""abc"""null
int.Parse()123例外例外例外
Convert.ToInt32()123例外例外0

Convert.ToInt32()null0として扱うため便利に見える場合もありますが、意図しないnull0に変わってしまう可能性があります。

たとえば、本来は未入力として扱いたい値が、いつの間にか0として処理されることがあります。

そのため、入力値が正しいか確認しながら変換したい場合は、int.TryParse()を使うのがおすすめです。

4. TryParseで安全にstringをintへ変換する方法

int.TryParse()は、文字列をintに変換できるかどうかを確認しながら変換するメソッドです。

int.Parse()との大きな違いは、変換に失敗しても例外が発生しないことです。

ユーザー入力や外部データのように、正しい数値が入っているとは限らない場面では、TryParseを使うのが安全です。

4-1. int.TryParseの基本構文

int.TryParse()の基本構文は次のとおりです。

C#
bool success = int.TryParse(文字列, out 変換結果);

具体例を見てみましょう。

C#
string text = "123";

bool success = int.TryParse(text, out int number);

Console.WriteLine(success); // True
Console.WriteLine(number); // 123

TryParseは、変換に成功するとtrueを返し、変換結果をout引数に入れます。

変換に失敗した場合はfalseを返します。

C#
string text = "abc";

bool success = int.TryParse(text, out int number);

Console.WriteLine(success); // False
Console.WriteLine(number); // 0

"abc"は整数に変換できないため、successfalseになります。

4-2. out引数の意味と使い方

out引数は、メソッドの中で値を受け取るための仕組みです。

int.TryParse()では、変換に成功した数値をoutで指定した変数に入れます。

C#
string text = "500";

if (int.TryParse(text, out int number))
{
Console.WriteLine(number + 100);
}

このコードでは、textintに変換できた場合だけ、numberを使って計算します。

out int numberのように書くと、その場で変数を宣言できます。

C#
if (int.TryParse("123", out int number))
{
Console.WriteLine(number);
}

古い書き方では、先に変数を宣言することもできます。

C#
string text = "123";
int number;

bool success = int.TryParse(text, out number);

現在のC#では、out int numberのように書く方が簡潔です。

4-3. 変換成功時と失敗時の処理を書く方法

TryParseは、if文と組み合わせて使うことが多いです。

C#
string input = "123";

if (int.TryParse(input, out int number))
{
Console.WriteLine("変換に成功しました。");
Console.WriteLine(number * 2);
}
else
{
Console.WriteLine("数値を入力してください。");
}

実行結果は次のようになります。

C#
変換に成功しました。
246

変換できない文字列の場合は、else側の処理が実行されます。

C#
string input = "abc";

if (int.TryParse(input, out int number))
{
Console.WriteLine(number * 2);
}
else
{
Console.WriteLine("数値を入力してください。");
}

実行結果は次のとおりです。

C#
数値を入力してください。

このように、TryParseを使うと、変換できる場合とできない場合で処理を分けられます。

4-4. ユーザー入力を変換するときにTryParseが向いている理由

ユーザー入力をintに変換するときは、int.Parse()よりもint.TryParse()が向いています。

理由は、ユーザーが必ず正しい数値を入力するとは限らないからです。

たとえば、年齢を入力してもらうプログラムを考えます。

C#
Console.WriteLine("年齢を入力してください。");
string input = Console.ReadLine();

int age = int.Parse(input);

ユーザーが"25"と入力すれば問題ありません。

しかし、次のような入力をするとエラーになります。

C#
abc
空文字
12.5

そこで、TryParseを使います。

C#
Console.WriteLine("年齢を入力してください。");
string input = Console.ReadLine();

if (int.TryParse(input, out int age))
{
Console.WriteLine($"あなたは{age}歳です。");
}
else
{
Console.WriteLine("年齢は整数で入力してください。");
}

これなら、入力が不正でもプログラムが突然停止しにくくなります。

ユーザー入力、フォーム入力、ファイル読み込み、APIレスポンスなど、外部から来る文字列をintに変換する場合は、基本的にTryParseを使うと安全です。

4-5. TryParseで失敗したときの戻り値と変数の値

int.TryParse()は、変換に成功するとtrue、失敗するとfalseを返します。

失敗した場合、outで受け取る変数には通常0が入ります。

C#
string text = "abc";

bool success = int.TryParse(text, out int number);

Console.WriteLine(success); // False
Console.WriteLine(number); // 0

ただし、ここで重要なのは、number0だからといって「入力された値が0だった」と判断してはいけないことです。

たとえば、次の2つはどちらもnumber0になります。

C#
int.TryParse("0", out int a);   // 成功して0
int.TryParse("abc", out int b); // 失敗して0

そのため、変換できたかどうかは必ず戻り値のtrueまたはfalseで判断します。

C#
if (int.TryParse(input, out int number))
{
Console.WriteLine($"入力された数値は{number}です。");
}
else
{
Console.WriteLine("変換に失敗しました。");
}

TryParseでは、変換結果の値だけでなく、成功したかどうかの判定が重要です。

5. Parse・TryParse・ToStringの使い分け

C#でintstringを変換するときは、目的に応じて使うメソッドを選びます。

基本的な考え方はシンプルです。

C#
int  string なら ToString
string int なら Parse または TryParse

さらに、文字列が必ず数値だと分かっているならParse、数値かどうか分からないならTryParseを使います。

5-1. intからstringならToStringを使う

intからstringへ変換したい場合は、ToString()を使います。

C#
int number = 123;
string text = number.ToString();

数値を文字列として保存したい場合や、表示用の文字列を作りたい場合に使います。

C#
int score = 85;
string message = "点数:" + score.ToString();

ただし、文字列補間を使う場合は、明示的にToString()を書かなくても自然に文字列として扱えます。

C#
int score = 85;
string message = $"点数:{score}";

どちらも間違いではありません。

単純に文字列へ変換したい場合はToString()、メッセージの中に埋め込みたい場合は文字列補間を使うと読みやすくなります。

5-2. 必ず数値に変換できる文字列ならParseを使う

stringからintへ変換する場合で、その文字列が必ず整数だと分かっているならint.Parse()を使えます。

C#
string text = "123";
int number = int.Parse(text);

たとえば、自分のプログラム内で作った文字列や、事前にチェック済みの文字列であれば、Parseを使っても問題ない場面があります。

C#
string yearText = "2026";
int year = int.Parse(yearText);

ただし、Parseは失敗すると例外が発生します。

そのため、ユーザー入力など、内容が不確実な文字列には慎重に使う必要があります。

5-3. 変換できるか分からない文字列ならTryParseを使う

文字列が整数に変換できるか分からない場合は、int.TryParse()を使います。

C#
string input = Console.ReadLine();

if (int.TryParse(input, out int number))
{
Console.WriteLine($"入力値は{number}です。");
}
else
{
Console.WriteLine("整数を入力してください。");
}

ユーザー入力はもちろん、ファイルや外部システムから受け取った値も、必ず正しいとは限りません。

そのため、次のような場面ではTryParseがおすすめです。

C#
string userInput = "abc";
string csvValue = "100";
string formValue = "";
string apiValue = null;

TryParseなら、変換できない値が来ても例外で止まらず、失敗時の処理を書けます。

5-4. nullを扱う可能性がある場合の考え方

nullを扱う可能性がある場合は、変換方法による違いに注意が必要です。

int.Parse(null)は例外になります。

C#
string text = null;
int number = int.Parse(text); // 例外

一方、Convert.ToInt32(null)0になります。

C#
string text = null;
int number = Convert.ToInt32(text); // 0

int.TryParse(null, out int number)は例外にならず、falseを返します。

C#
string text = null;

bool success = int.TryParse(text, out int number);

Console.WriteLine(success); // False
Console.WriteLine(number); // 0

nullが来る可能性がある場合は、TryParseを使うと安全です。

ただし、null0として扱ってよいのか、未入力として扱うべきなのかは、プログラムの仕様によって変わります。

たとえば、年齢の入力でnullや空文字が来た場合、勝手に0歳として扱うのは不自然な場合があります。

C#
if (int.TryParse(input, out int age))
{
Console.WriteLine($"年齢:{age}");
}
else
{
Console.WriteLine("年齢を入力してください。");
}

このように、nullや不正な文字列は失敗として扱い、適切なメッセージを表示するのが安全です。

5-5. 初心者が迷いやすい使い分け早見表

ToStringParseTryParseの使い分けは、次の表で整理できます。

やりたいこと使う方法
intstringにしたいToString()number.ToString()
数値をメッセージに埋め込みたい文字列補間$"値は{number}"
必ず数字のstringintにしたいint.Parse()int.Parse("123")
数字か分からないstringintにしたいint.TryParse()int.TryParse(input, out int n)
nullの可能性がある文字列を安全に扱いたいint.TryParse()int.TryParse(text, out int n)
nullを0として扱いたいConvert.ToInt32()Convert.ToInt32(text)

初心者におすすめの判断基準は次のとおりです。

C#
// intからstring
string text = number.ToString();

// stringからint:固定値や確実な数字
int number = int.Parse(text);

// stringからint:ユーザー入力や不確実な値
if (int.TryParse(text, out int number))
{
// 成功時の処理
}
else
{
// 失敗時の処理
}

迷った場合は、stringからintへの変換ではTryParseを使うと安全です。

6. よくあるエラーと対処法

intstringの変換では、特にstringからintへ変換するときにエラーが起きやすいです。

代表的なエラーは次の2つです。

C#
FormatException
OverflowException

また、null、空文字、全角数字、スペース、小数、カンマ区切りなども初心者がつまずきやすいポイントです。

6-1. FormatExceptionが出る原因と対処法

FormatExceptionは、文字列の形式が整数として正しくないときに発生します。

C#
int number = int.Parse("abc");

"abc"は整数ではないため、FormatExceptionになります。

次のような文字列でも発生します。

C#
int.Parse("");
int.Parse("12abc");
int.Parse("12.3");
int.Parse("1,000");

対処法としては、int.Parse()ではなくint.TryParse()を使います。

C#
string input = "abc";

if (int.TryParse(input, out int number))
{
Console.WriteLine(number);
}
else
{
Console.WriteLine("整数に変換できません。");
}

これなら、変換に失敗しても例外でプログラムが止まりません。

また、入力前後の不要なスペースを取り除きたい場合は、Trim()を使うこともあります。

C#
string input = " 123 ";
input = input.Trim();

int number = int.Parse(input);

ただし、int.Parse()int.TryParse()は前後の半角スペースを許容することが多いため、必ずしもTrim()が必要とは限りません。

6-2. OverflowExceptionが出る原因と対処法

OverflowExceptionは、変換しようとした数値がintの範囲を超えているときに発生します。

intの範囲は次のとおりです。

C#
-2147483648  2147483647

たとえば、次のコードは範囲を超えているためエラーになります。

C#
int number = int.Parse("2147483648");

2147483648intの最大値である2147483647を超えています。

対処法として、まずはTryParseを使って安全に判定します。

C#
string input = "2147483648";

if (int.TryParse(input, out int number))
{
Console.WriteLine(number);
}
else
{
Console.WriteLine("intの範囲内の整数を入力してください。");
}

より大きな整数を扱いたい場合は、longを使う方法もあります。

C#
string input = "2147483648";

if (long.TryParse(input, out long number))
{
Console.WriteLine(number);
}

intで足りない場合は、longdecimalなど、目的に合った型を選びましょう。

6-3. nullを変換しようとしたときの注意点

nullを変換するときは、使うメソッドによって動きが変わります。

C#
string text = null;

int.Parse(text)は例外になります。

C#
int number = int.Parse(text); // ArgumentNullException

Convert.ToInt32(text)0になります。

C#
int number = Convert.ToInt32(text); // 0

int.TryParse(text, out int number)falseになります。

C#
bool success = int.TryParse(text, out int number);

Console.WriteLine(success); // False
Console.WriteLine(number); // 0

nullを安全に扱いたい場合は、TryParseを使うのが分かりやすいです。

C#
string text = null;

if (int.TryParse(text, out int number))
{
Console.WriteLine(number);
}
else
{
Console.WriteLine("数値が入力されていません。");
}

また、nullの場合だけ別処理にしたいなら、先にnullチェックを書いてもよいです。

C#
if (text == null)
{
Console.WriteLine("値がnullです。");
}
else if (int.TryParse(text, out int number))
{
Console.WriteLine(number);
}
else
{
Console.WriteLine("整数に変換できません。");
}

6-4. 全角数字やスペースを含む文字列を変換する場合

ユーザーが日本語環境で入力する場合、全角数字が含まれることがあります。

C#
string input = "123";

このような全角数字は、通常のint.Parse()int.TryParse()ではそのまま変換できないことがあります。

安全に扱うには、入力値を半角数字に正規化してから変換する方法を検討します。

単純な例として、全角数字を半角数字に置き換える処理は次のように書けます。

C#
string input = "123";

input = input
.Replace("0", "0")
.Replace("1", "1")
.Replace("2", "2")
.Replace("3", "3")
.Replace("4", "4")
.Replace("5", "5")
.Replace("6", "6")
.Replace("7", "7")
.Replace("8", "8")
.Replace("9", "9");

if (int.TryParse(input, out int number))
{
Console.WriteLine(number);
}

また、前後のスペースを取り除きたい場合はTrim()を使います。

C#
string input = " 123 ";
input = input.Trim();

if (int.TryParse(input, out int number))
{
Console.WriteLine(number);
}

ただし、文字列の途中にスペースが入っている場合は変換できません。

C#
int.TryParse("1 23", out int number); // False

入力値をどこまで許可するかは、アプリの仕様に合わせて決める必要があります。

6-5. 小数やカンマ区切りの文字列をintに変換したい場合

intは整数型なので、小数をそのまま変換することはできません。

C#
int.Parse("12.5"); // FormatException

小数を扱いたい場合は、まずdoubledecimalに変換します。

C#
string input = "12.5";

if (double.TryParse(input, out double value))
{
int number = (int)value;
Console.WriteLine(number); // 12
}

ただし、(int)でキャストすると小数点以下は切り捨てられます。

四捨五入したい場合は、Math.Round()などを使います。

C#
string input = "12.5";

if (double.TryParse(input, out double value))
{
int number = (int)Math.Round(value);
Console.WriteLine(number); // 12 または 13
}

丸めの動作は指定方法によって変わるため、金額や重要な計算では注意が必要です。

カンマ区切りの文字列を扱いたい場合は、NumberStylesを指定する方法があります。

C#
using System.Globalization;

string input = "1,000";

if (int.TryParse(input, NumberStyles.AllowThousands, CultureInfo.InvariantCulture, out int number))
{
Console.WriteLine(number); // 1000
}
else
{
Console.WriteLine("変換できません。");
}

通常のint.TryParse("1,000", out int number)では失敗する場合があるため、カンマ区切りを許可したい場合は、明示的に指定すると分かりやすくなります。

7. 実践で使えるサンプルコード

ここからは、実際のプログラムで使いやすいintstringの変換サンプルを紹介します。

コンソール入力、計算結果の表示、入力チェック、エラーメッセージ、Webフォームやアプリでの使い方を順番に見ていきましょう。

7-1. コンソール入力された文字列をintに変換する

コンソールから入力された値は、基本的にstringとして取得されます。

C#
Console.WriteLine("数値を入力してください。");

string input = Console.ReadLine();
int number = int.Parse(input);

Console.WriteLine(number * 2);

ユーザーが10と入力すると、結果は次のようになります。

C#
20

ただし、このコードは入力が必ず整数であることを前提にしています。

ユーザーがabcなどを入力するとエラーになるため、実際にはTryParseを使う方が安全です。

C#
Console.WriteLine("数値を入力してください。");

string input = Console.ReadLine();

if (int.TryParse(input, out int number))
{
Console.WriteLine(number * 2);
}
else
{
Console.WriteLine("整数を入力してください。");
}

ユーザー入力を扱う場合は、このように変換できるかどうかを確認してから処理しましょう。

7-2. 計算結果のintをstringに変換して表示する

計算結果のintstringに変換して表示する例です。

C#
int price = 1200;
int count = 3;

int total = price * count;
string message = "合計金額は" + total.ToString() + "円です。";

Console.WriteLine(message);

実行結果は次のとおりです。

C#
合計金額は3600円です。

文字列補間を使うと、さらに読みやすく書けます。

C#
int price = 1200;
int count = 3;

int total = price * count;
string message = $"合計金額は{total}円です。";

Console.WriteLine(message);

表示用の文字列を作る場合は、文字列補間を使うと自然です。

桁区切りで表示したい場合は、次のように書けます。

C#
int total = 3600;
string message = $"合計金額は{total:N0}円です。";

Console.WriteLine(message);

実行結果は次のようになります。

C#
合計金額は3,600円です。

7-3. TryParseで入力チェックを行う

TryParseを使うと、入力値が整数かどうかを簡単にチェックできます。

C#
Console.WriteLine("年齢を入力してください。");

string input = Console.ReadLine();

if (int.TryParse(input, out int age))
{
Console.WriteLine($"年齢は{age}歳です。");
}
else
{
Console.WriteLine("年齢は整数で入力してください。");
}

さらに、年齢として自然な範囲かどうかも確認できます。

C#
Console.WriteLine("年齢を入力してください。");

string input = Console.ReadLine();

if (int.TryParse(input, out int age))
{
if (age >= 0 && age <= 120)
{
Console.WriteLine($"年齢は{age}歳です。");
}
else
{
Console.WriteLine("年齢は0から120の範囲で入力してください。");
}
}
else
{
Console.WriteLine("年齢は整数で入力してください。");
}

TryParseは文字列を数値に変換できるかを判定できますが、「業務ルールとして正しい値かどうか」は別途チェックする必要があります。

7-4. 変換に失敗したらエラーメッセージを表示する

変換に失敗したときに、ユーザーに分かりやすいエラーメッセージを表示する例です。

C#
Console.WriteLine("購入個数を入力してください。");

string input = Console.ReadLine();

if (!int.TryParse(input, out int quantity))
{
Console.WriteLine("購入個数は整数で入力してください。");
return;
}

if (quantity <= 0)
{
Console.WriteLine("購入個数は1以上を入力してください。");
return;
}

Console.WriteLine($"{quantity}個購入します。");

このコードでは、まずTryParseで整数に変換できるか確認しています。

変換できなければ、エラーメッセージを表示して処理を終了します。

C#
if (!int.TryParse(input, out int quantity))
{
Console.WriteLine("購入個数は整数で入力してください。");
return;
}

その後、数値としては変換できても、0以下であれば別のエラーとして扱っています。

C#
if (quantity <= 0)
{
Console.WriteLine("購入個数は1以上を入力してください。");
return;
}

入力チェックでは、「変換できるか」と「値として正しいか」を分けて考えるのがポイントです。

7-5. Webフォームやアプリで使う変換処理の例

Webフォームやアプリでは、入力欄の値をstringとして受け取り、それをintへ変換することがよくあります。

たとえば、フォームから商品数を受け取る場合を考えます。

C#
string quantityText = "3";

if (int.TryParse(quantityText, out int quantity))
{
int price = 1200;
int total = price * quantity;

string message = $"合計金額は{total}円です。";
Console.WriteLine(message);
}
else
{
Console.WriteLine("数量は整数で入力してください。");
}

実際のアプリでは、空文字やnullが入ることもあります。

C#
string quantityText = null;

if (int.TryParse(quantityText, out int quantity))
{
Console.WriteLine($"数量:{quantity}");
}
else
{
Console.WriteLine("数量が入力されていません。");
}

Webフォームでは、入力値をそのまま信用せず、必ずチェックしてから使うことが大切です。

また、数値として変換できた後に、範囲チェックも行いましょう。

C#
string quantityText = "5";

if (!int.TryParse(quantityText, out int quantity))
{
Console.WriteLine("数量は整数で入力してください。");
}
else if (quantity < 1 || quantity > 99)
{
Console.WriteLine("数量は1から99の範囲で入力してください。");
}
else
{
Console.WriteLine($"数量:{quantity}");
}

このように、TryParseを使うことで、入力値の変換とエラー処理を安全に書けます。

8. C#のintとstring変換に関するよくある質問

ここでは、C#のintstring変換で初心者が疑問に感じやすいポイントをQ&A形式で解説します。

intstringは見た目が似ていても型が違うため、直接キャストできない、ParseTryParseの使い分けに迷う、といった疑問がよくあります。

8-1. intをstringにキャストできないのはなぜ?

intstringに直接キャストすることはできません。

C#
int number = 123;
string text = (string)number; // エラー

これは、intstringがまったく別の型だからです。

キャストは、互換性のある型同士で使うものです。intは整数を表す型、stringは文字列を表す型なので、直接キャストではなく変換処理が必要です。

正しくはToString()を使います。

C#
int number = 123;
string text = number.ToString();

または、文字列補間で文字列の中に埋め込むこともできます。

C#
int number = 123;
string text = $"{number}";

8-2. stringをintに直接キャストできないのはなぜ?

stringintに直接キャストすることもできません。

C#
string text = "123";
int number = (int)text; // エラー

"123"は数字に見えますが、型としては文字列です。

C#は型を厳密に扱う言語なので、文字列を整数として使うには、明示的に解析して変換する必要があります。

正しくは、int.Parse()またはint.TryParse()を使います。

C#
string text = "123";
int number = int.Parse(text);

安全に変換するなら、TryParseを使います。

C#
string text = "123";

if (int.TryParse(text, out int number))
{
Console.WriteLine(number);
}

stringからintへの変換では、文字列の中身が整数として正しいかどうかを確認する必要があります。

8-3. ParseとTryParseはどちらを使うべき?

基本的には、変換できることが確実ならParse、変換できるか分からないならTryParseを使います。

C#
int number = int.Parse("123");

このように、固定値や事前にチェック済みの値であればParseでも問題ありません。

一方で、ユーザー入力や外部データのように、不正な値が入る可能性がある場合はTryParseが安全です。

C#
string input = Console.ReadLine();

if (int.TryParse(input, out int number))
{
Console.WriteLine(number);
}
else
{
Console.WriteLine("整数を入力してください。");
}

初心者のうちは、stringからintへ変換するときは、まずTryParseを使うと覚えておくと安心です。

特に、コンソール入力、Webフォーム、アプリの入力欄、CSV、外部APIの値などは、TryParseを使うのがおすすめです。

8-4. ToStringとConvert.ToStringの違いは?

ToString()Convert.ToString()は、どちらも値を文字列に変換できます。

C#
int number = 123;

string a = number.ToString();
string b = Convert.ToString(number);

intのように値が必ず存在する場合は、どちらを使っても文字列に変換できます。

違いが出やすいのは、nullを扱う場合です。

C#
object value = null;

string text = Convert.ToString(value);

Convert.ToString(null)は空文字を返します。

一方、nullの変数に対して直接ToString()を呼ぶと、NullReferenceExceptionになります。

C#
object value = null;

string text = value.ToString(); // NullReferenceException

ただし、intは通常nullにならない値型なので、単純にintstringへ変換するならnumber.ToString()で十分です。

C#
int number = 123;
string text = number.ToString();

nullの可能性があるオブジェクトを文字列にしたい場合は、Convert.ToString()やnull条件演算子を検討します。

C#
object value = null;
string text = value?.ToString() ?? "";

8-5. 変換できない文字列を事前に判定する方法は?

文字列がintに変換できるかを判定したい場合は、int.TryParse()を使います。

C#
string text = "123";

bool canConvert = int.TryParse(text, out int number);

Console.WriteLine(canConvert); // True

変換できない文字列の場合はfalseになります。

C#
string text = "abc";

bool canConvert = int.TryParse(text, out int number);

Console.WriteLine(canConvert); // False

TryParseは、判定と変換を同時に行えるため便利です。

C#
if (int.TryParse(text, out int number))
{
Console.WriteLine($"変換できました:{number}");
}
else
{
Console.WriteLine("変換できません。");
}

正規表現で数字だけかどうかを判定する方法もありますが、intの範囲チェックまでは別途必要になります。

C#
using System.Text.RegularExpressions;

string text = "123";

bool isDigits = Regex.IsMatch(text, @"^\d+$");

ただし、"999999999999999999999"のように数字だけでもintの範囲を超えていれば変換できません。

そのため、intに変換できるかどうかを知りたい場合は、最終的にはint.TryParse()を使うのが確実です。

まとめ

C#でintstringを変換する方法は、用途に応じて使い分けることが大切です。

intからstringへ変換する場合は、基本的にToString()を使います。

C#
int number = 123;
string text = number.ToString();

文字列の中に数値を埋め込みたい場合は、文字列補間を使うと読みやすくなります。

C#
int number = 123;
string message = $"値は{number}です。";

stringからintへ変換する場合は、int.Parse()またはint.TryParse()を使います。

C#
int number = int.Parse("123");

ただし、Parseは変換できない文字列を渡すと例外が発生します。

ユーザー入力や外部データのように、正しい整数かどうか分からない場合は、TryParseを使うのが安全です。

C#
string input = "123";

if (int.TryParse(input, out int number))
{
Console.WriteLine(number);
}
else
{
Console.WriteLine("整数に変換できません。");
}

使い分けを簡単にまとめると、次のようになります。

場面使う方法
intstringに変換したいToString()
数値を文字列に埋め込みたい文字列補間
確実に整数の文字列をintにしたいint.Parse()
整数か分からない文字列をintにしたいint.TryParse()
nullや不正入力の可能性があるint.TryParse()

C#のintstring変換は、初心者が必ず通る基本です。

特に、csharp int stringの変換で迷ったときは、「表示したいのか」「計算したいのか」を考えると判断しやすくなります。

表示したいならstring、計算したいならintです。

そして、stringintに変換するときは、失敗する可能性を考えてTryParseを使う習慣をつけると、エラーに強いC#コードを書けるようになります。