C# int.TryParseの使い方を初心者向けに解説|Parseとの違い・out引数・失敗時の戻り値までサンプルで理解
はじめに
C#でプログラムを書いていると、「文字列として受け取った値を数値に変換したい」という場面がよくあります。たとえば、ユーザーが入力した年齢、画面のテキストボックスに入った数量、CSVファイルから読み込んだ金額、設定ファイルに書かれた回数などは、最初はstring型として扱われることが多いです。
このような文字列をint型に変換するときによく使われるのが、int.TryParseです。
int.TryParseは、変換に成功したかどうかをtrueまたはfalseで返し、成功した場合は変換後の整数を受け取れます。変換できない文字列を渡しても基本的に例外を発生させず、安全に判定できるため、初心者にも実務でもよく使われます。Microsoft Learnでも、Int32.TryParseは文字列形式の数値を32ビット符号付き整数に変換し、戻り値で成功したかどうかを示すメソッドとして説明されています。
この記事では、C#のint.TryParseの基本構文、int.Parseとの違い、out引数の意味、失敗時の戻り値、実践的な使い方まで、サンプルコード付きで初心者向けにわかりやすく解説します。
1. C#のint.TryParseとは?初心者がまず押さえる基本
1-1. int.TryParseでできること
int.TryParseは、文字列をint型の整数に変換できるか試すためのメソッドです。
たとえば、次のような文字列があります。
C#"123"
これは見た目は数字ですが、C#上ではダブルクォーテーションで囲まれているためstring型です。このままでは数値計算に使えません。
C#string text = "123";
このtextを数値として計算に使いたい場合、int.TryParseを使ってint型に変換します。
C#string text = "123";
bool success = int.TryParse(text, out int number);
Console.WriteLine(success); // True
Console.WriteLine(number); // 123
successには変換できたかどうかが入り、numberには変換後の整数が入ります。
1-2. 文字列をint型に変換する場面
文字列をint型に変換する場面は非常に多いです。代表的な例は次のようなケースです。
C#// ユーザー入力
string ageText = "25";
// CSVから読み込んだ値
string quantityText = "10";
// 設定ファイルから読み込んだ値
string retryCountText = "3";
これらはすべて見た目は数値ですが、型はstringです。数値として比較したり計算したりするには、int型へ変換する必要があります。
C#if (int.TryParse(ageText, out int age))
{
Console.WriteLine(age + 1);
}
int.TryParseを使うと、「変換できる場合だけ処理する」という安全な書き方ができます。
1-3. int.TryParseが初心者におすすめされる理由
初心者が文字列を数値に変換するとき、まず覚えておきたいのはint.TryParseです。
理由は、変換に失敗してもプログラムが止まりにくいからです。
たとえば、ユーザーが必ず数字を入力してくれるとは限りません。
C#string input = "abc";
このような文字列はintに変換できません。しかしint.TryParseなら、失敗してもfalseが返るだけです。
C#if (int.TryParse(input, out int number))
{
Console.WriteLine($"数値は{number}です");
}
else
{
Console.WriteLine("数値に変換できませんでした");
}
入力値チェックやエラー表示と相性がよいため、実務でもよく使われる書き方です。
2. int.TryParseの基本構文と戻り値
2-1. int.TryParseの書き方
int.TryParseの基本構文は次のとおりです。
C#bool result = int.TryParse(変換したい文字列, out 変換後の数値を入れる変数);
実際のコードでは、次のように書きます。
C#string text = "100";
bool success = int.TryParse(text, out int number);
このコードでは、textをint型に変換できるかを試しています。
変換に成功すると、successはtrueになり、numberには100が入ります。
2-2. 第1引数に指定する文字列
第1引数には、変換したい文字列を指定します。
C#int.TryParse("123", out int number);
変数を渡すこともできます。
C#string input = "456";
int.TryParse(input, out int number);
第1引数に指定できる代表的な文字列は、次のようなものです。
C#"123"
"-123"
"+123"
" 123 "
前後の空白や、先頭の+、-は通常のint.TryParseでも扱えます。一方で、小数、カンマ区切り、数字以外の文字が含まれる文字列は、通常の書き方では失敗します。
C#"123.45" // 失敗
"1,234" // 失敗
"abc" // 失敗
Microsoft Learnの例でも、通常のInt32.TryParse(String, Int32)では"9432.0"や"16,667"の変換に失敗する例が示されています。
2-3. out引数に変換後の数値を受け取る仕組み
int.TryParseの第2引数には、outを付けた変数を指定します。
C#string text = "123";
bool success = int.TryParse(text, out int number);
このnumberに、変換後の整数が入ります。
outは、メソッドの中で値をセットして呼び出し元に返すための仕組みです。int.TryParseでは、戻り値で成功・失敗を返し、out引数で変換後の数値を返します。
つまり、int.TryParseは次の2つを同時に返しているようなイメージです。
C#// 戻り値: 変換に成功したか
bool success;
// out引数: 変換後の数値
int number;
2-4. 戻り値がtrueになる場合
int.TryParseの戻り値がtrueになるのは、文字列を正しくint型に変換できた場合です。
C#string text = "123";
bool success = int.TryParse(text, out int number);
Console.WriteLine(success); // True
Console.WriteLine(number); // 123
マイナスの値も変換できます。
C#string text = "-50";
bool success = int.TryParse(text, out int number);
Console.WriteLine(success); // True
Console.WriteLine(number); // -50
前後に空白がある場合も変換できます。
C#string text = " 300 ";
bool success = int.TryParse(text, out int number);
Console.WriteLine(success); // True
Console.WriteLine(number); // 300
2-5. 戻り値がfalseになる場合
int.TryParseの戻り値がfalseになるのは、文字列をint型に変換できない場合です。
C#string text = "abc";
bool success = int.TryParse(text, out int number);
Console.WriteLine(success); // False
Console.WriteLine(number); // 0
変換に失敗すると、基本的なint.TryParse(string, out int)ではout変数には0が入ります。
失敗する代表例は次のとおりです。
C#int.TryParse("", out int a); // false
int.TryParse(null, out int b); // false
int.TryParse("abc", out int c); // false
int.TryParse("123.45", out int d); // false
int.TryParse("1,234", out int e); // false
int.TryParse("999999999999", out int f); // false
int.TryParseは、null、空文字、形式が正しくない文字列、intの範囲を超える値では変換に失敗します。
3. int.TryParseの使い方をサンプルコードで解説
3-1. 数字の文字列をintに変換する基本例
まずは一番シンプルな例です。
C#string text = "123";
bool success = int.TryParse(text, out int number);
Console.WriteLine(success);
Console.WriteLine(number);
実行結果は次のようになります。
C#True
123
"123"は整数として正しい文字列なので、変換に成功します。
3-2. if文と組み合わせて成功・失敗を判定する例
int.TryParseは、if文と組み合わせて使うことが多いです。
C#string input = "200";
if (int.TryParse(input, out int number))
{
Console.WriteLine($"変換に成功しました: {number}");
}
else
{
Console.WriteLine("変換に失敗しました");
}
実行結果は次のようになります。
C#変換に成功しました: 200
失敗する文字列の場合は、else側が実行されます。
C#string input = "hello";
if (int.TryParse(input, out int number))
{
Console.WriteLine($"変換に成功しました: {number}");
}
else
{
Console.WriteLine("変換に失敗しました");
}
実行結果です。
C#変換に失敗しました
このように、TryParseは「変換できた場合だけ処理する」という流れを作りやすいメソッドです。
3-3. out varを使ったシンプルな書き方
C#では、out varを使ってより短く書くこともできます。
C#string input = "500";
if (int.TryParse(input, out var number))
{
Console.WriteLine(number);
}
out int numberと書かなくても、コンパイラがnumberの型をintだと推論してくれます。
次の2つはほぼ同じ意味です。
C#if (int.TryParse(input, out int number))
{
Console.WriteLine(number);
}
C#if (int.TryParse(input, out var number))
{
Console.WriteLine(number);
}
初心者のうちはout int numberのほうが型が見えてわかりやすいです。慣れてきたらout var numberを使うとコードをすっきり書けます。
3-4. ユーザー入力を安全に数値変換する例
コンソールアプリでユーザー入力を受け取る例を見てみましょう。
C#Console.WriteLine("年齢を入力してください:");
string? input = Console.ReadLine();
if (int.TryParse(input, out int age))
{
Console.WriteLine($"あなたの年齢は{age}歳です");
}
else
{
Console.WriteLine("年齢は数値で入力してください");
}
Console.ReadLine()の戻り値は文字列です。そのため、入力された内容を数値として扱いたい場合は変換が必要です。
ユーザーが25と入力すれば成功します。
C#あなたの年齢は25歳です
ユーザーがabcと入力すれば失敗します。
C#年齢は数値で入力してください
このように、ユーザー入力のように正しい値が入るとは限らない場面では、int.TryParseがとても便利です。
4. int.Parseとの違い
4-1. int.Parseは変換できない文字列で例外が発生する
int.Parseも文字列をint型に変換するメソッドです。
C#string text = "123";
int number = int.Parse(text);
Console.WriteLine(number); // 123
正しい数値文字列であれば問題なく変換できます。
しかし、変換できない文字列を渡すと例外が発生します。
C#string text = "abc";
int number = int.Parse(text); // 例外が発生
int.Parseでは、nullを渡すとArgumentNullException、形式が正しくない文字列ではFormatException、intの範囲を超える値ではOverflowExceptionが発生します。
4-2. int.TryParseは例外を出さずにfalseを返す
一方、int.TryParseは変換できない文字列でも、通常は例外を出さずにfalseを返します。
C#string text = "abc";
bool success = int.TryParse(text, out int number);
Console.WriteLine(success); // False
Console.WriteLine(number); // 0
そのため、ユーザー入力や外部ファイルの値など、正しい数値かどうかわからないデータを扱うときに向いています。
4-3. ParseとTryParseの戻り値の違い
int.Parseとint.TryParseの大きな違いは、戻り値です。
int.Parseは、変換後のint値そのものを返します。
C#int number = int.Parse("123");
一方、int.TryParseは、変換に成功したかどうかをboolで返します。
C#bool success = int.TryParse("123", out int number);
整理すると、次のようになります。
| メソッド | 戻り値 | 変換後の値 | 失敗時 |
|---|---|---|---|
int.Parse | int | 戻り値で受け取る | 例外が発生 |
int.TryParse | bool | out引数で受け取る | falseを返す |
初心者は、「Parseは変換する」「TryParseは変換を試す」と覚えるとわかりやすいです。
4-4. try-catchよりTryParseを使うべきケース
int.Parseでも、try-catchを使えば失敗時の処理は書けます。
C#try
{
int number = int.Parse("abc");
Console.WriteLine(number);
}
catch (FormatException)
{
Console.WriteLine("数値に変換できませんでした");
}
しかし、入力値チェックのためだけに例外処理を書くと、コードが少し大げさになります。
同じ処理はint.TryParseでシンプルに書けます。
C#if (int.TryParse("abc", out int number))
{
Console.WriteLine(number);
}
else
{
Console.WriteLine("数値に変換できませんでした");
}
ユーザー入力、フォーム入力、CSV、設定ファイルなど、「失敗する可能性が普通にある」場面では、try-catchよりTryParseを使うほうが自然です。
4-5. ParseとTryParseの使い分け
int.Parseとint.TryParseは、次のように使い分けるとよいです。
int.Parseが向いているのは、値が必ず数値だと保証されている場面です。
C#string fixedValue = "100";
int number = int.Parse(fixedValue);
一方、int.TryParseが向いているのは、値が数値かどうかわからない場面です。
C#string input = Console.ReadLine();
if (int.TryParse(input, out int number))
{
Console.WriteLine(number);
}
else
{
Console.WriteLine("数値を入力してください");
}
実務では、外部から入ってくるデータには基本的にTryParseを使う、と考えると安全です。
5. out引数の意味と初心者がつまずきやすいポイント
5-1. out引数とは何か
out引数とは、メソッドの中で値をセットして、呼び出し元に返すための仕組みです。
通常、メソッドの戻り値は1つだけです。
C#int GetNumber()
{
return 123;
}
しかし、int.TryParseでは「成功したかどうか」と「変換後の数値」の2つの情報が必要です。
そこで、戻り値ではtrueまたはfalseを返し、変換後の数値はout引数で返します。
C#bool success = int.TryParse("123", out int number);
この場合、successが成功・失敗、numberが変換後の整数です。
5-2. なぜ戻り値とは別にoutで結果を受け取るのか
int.TryParseが戻り値で数値を返さないのは、失敗したかどうかを明確にするためです。
たとえば、変換結果が0になるケースを考えます。
C#string text = "0";
この文字列は正しく0に変換できます。
C#bool success = int.TryParse("0", out int number);
Console.WriteLine(success); // True
Console.WriteLine(number); // 0
一方、変換に失敗した場合も、out変数には0が入ります。
C#bool success = int.TryParse("abc", out int number);
Console.WriteLine(success); // False
Console.WriteLine(number); // 0
つまり、numberだけを見ても、成功して0になったのか、失敗して0になったのか判断できません。
そのため、int.TryParseでは戻り値のboolで成功・失敗を判定し、out引数で数値を受け取る仕組みになっています。
5-3. 変換に失敗したときout変数には何が入るのか
基本的なint.TryParse(string, out int)では、変換に失敗するとout変数には0が入ります。
C#string text = "abc";
bool success = int.TryParse(text, out int number);
Console.WriteLine(success); // False
Console.WriteLine(number); // 0
ただし、重要なのはnumberの値ではなく、successを見ることです。
C#if (success)
{
Console.WriteLine($"変換後の値: {number}");
}
else
{
Console.WriteLine("変換できませんでした");
}
失敗時の0をそのまま有効な数値として扱わないように注意しましょう。
5-4. 事前に変数へ値を入れていても上書きされる点に注意
out引数に渡した変数は、メソッドの実行後に上書きされます。
C#int number = 999;
bool success = int.TryParse("123", out number);
Console.WriteLine(number); // 123
成功した場合は、変換後の値で上書きされます。
失敗した場合も、基本的には0で上書きされます。
C#int number = 999;
bool success = int.TryParse("abc", out number);
Console.WriteLine(success); // False
Console.WriteLine(number); // 0
「元の値を保持したい」と考えている場合は、outに同じ変数を渡さないようにしましょう。
C#int defaultValue = 999;
if (int.TryParse("abc", out int parsed))
{
defaultValue = parsed;
}
Console.WriteLine(defaultValue); // 999
このように、一時変数で受け取ってから代入するほうが安全な場合もあります。
5-5. out int resultとout var resultの違い
out int resultとout var resultは、どちらもint.TryParseでよく使われます。
C#if (int.TryParse("123", out int result))
{
Console.WriteLine(result);
}
C#if (int.TryParse("123", out var result))
{
Console.WriteLine(result);
}
out int resultは、変数の型を明示しています。
out var resultは、型推論によってresultがint型になります。
int.TryParseの第2引数はout intなので、varを使ってもresultはint型です。
初心者には、最初はout int resultがおすすめです。慣れてきたら、コードを短くするためにout var resultを使うとよいでしょう。
6. int.TryParseで変換に失敗する代表例
6-1. 空文字・nullを渡した場合
空文字は数値ではないため、変換に失敗します。
C#bool success = int.TryParse("", out int number);
Console.WriteLine(success); // False
Console.WriteLine(number); // 0
nullを渡した場合も失敗します。
C#string? text = null;
bool success = int.TryParse(text, out int number);
Console.WriteLine(success); // False
Console.WriteLine(number); // 0
int.Parseではnullで例外が発生しますが、int.TryParseならfalseで判定できます。
6-2. 数字以外の文字が含まれる場合
数字以外の文字が含まれると、通常は変換に失敗します。
C#int.TryParse("abc", out int a); // false
int.TryParse("123abc", out int b); // false
int.TryParse("A123", out int c); // false
単位が付いている文字列もそのままでは変換できません。
C#string text = "100円";
bool success = int.TryParse(text, out int number);
Console.WriteLine(success); // False
このような場合は、不要な文字を取り除いてから変換する必要があります。
C#string text = "100円";
string replaced = text.Replace("円", "");
if (int.TryParse(replaced, out int price))
{
Console.WriteLine(price); // 100
}
6-3. 小数を渡した場合
intは整数型なので、小数を表す文字列は通常のint.TryParseでは変換できません。
C#bool success = int.TryParse("123.45", out int number);
Console.WriteLine(success); // False
小数を扱いたい場合は、double.TryParseやdecimal.TryParseを使います。
C#if (double.TryParse("123.45", out double value))
{
Console.WriteLine(value); // 123.45
}
小数を整数にしたい場合は、まず小数として変換してから、四捨五入や切り捨てを行うほうが意図が明確です。
C#if (double.TryParse("123.45", out double value))
{
int rounded = (int)Math.Round(value);
Console.WriteLine(rounded); // 123
}
6-4. カンマ区切りの数値を渡した場合
通常のint.TryParseでは、カンマ区切りの数値は変換に失敗します。
C#bool success = int.TryParse("1,234", out int number);
Console.WriteLine(success); // False
カンマ区切りの数値を変換したい場合は、NumberStylesを指定するオーバーロードを使います。
C#using System.Globalization;
string text = "1,234";
bool success = int.TryParse(
text,
NumberStyles.AllowThousands,
CultureInfo.InvariantCulture,
out int number
);
Console.WriteLine(success); // True
Console.WriteLine(number); // 1234
NumberStyles.AllowThousandsは、桁区切り記号を含む数値文字列を許可するための指定です。
6-5. intの範囲を超える数値を渡した場合
int型には扱える範囲があります。
C#int.MinValue // -2147483648
int.MaxValue // 2147483647
この範囲を超える文字列は、数値の形式として正しくてもintには変換できません。
C#string text = "2147483648";
bool success = int.TryParse(text, out int number);
Console.WriteLine(success); // False
Console.WriteLine(number); // 0
2147483648はint.MaxValueより大きいため失敗します。
より大きな整数を扱いたい場合は、long.TryParseを使います。
C#if (long.TryParse("2147483648", out long value))
{
Console.WriteLine(value);
}
6-6. 全角数字やスペースを含む文字列の扱い
通常のint.TryParseでは、半角数字の0から9を使った文字列を想定します。
C#int.TryParse("123", out int a); // true
全角数字は環境や指定方法によって期待通りにならないことがあるため、ユーザー入力で全角数字が混ざる可能性がある場合は、事前に半角へ正規化する処理を検討します。
C#string text = "123";
// 必要に応じて半角へ変換してからTryParseする
また、前後のスペースは許可されます。
C#int.TryParse(" 123 ", out int number); // true
ただし、数字の途中にスペースが入っている場合は失敗します。
C#int.TryParse("12 3", out int number); // false
入力値を扱うときは、必要に応じてTrim()で前後の空白を取り除くと読みやすくなります。
C#string input = " 123 ";
string trimmed = input.Trim();
if (int.TryParse(trimmed, out int number))
{
Console.WriteLine(number);
}
7. よく使う実践パターン
7-1. 入力値チェックに使う
int.TryParseは、入力値チェックでよく使われます。
C#Console.WriteLine("数量を入力してください:");
string? input = Console.ReadLine();
if (!int.TryParse(input, out int quantity))
{
Console.WriteLine("数量は整数で入力してください");
return;
}
Console.WriteLine($"入力された数量: {quantity}");
!int.TryParse(...)と書くことで、「変換に失敗した場合」を先に処理できます。
この書き方は、エラー時に早めに処理を抜けるため、後続のコードが読みやすくなります。
7-2. 変換できない場合にデフォルト値を設定する
変換できない場合に、あらかじめ決めたデフォルト値を使いたいことがあります。
C#string text = "abc";
int number;
if (int.TryParse(text, out number))
{
Console.WriteLine(number);
}
else
{
number = 0;
}
Console.WriteLine(number);
三項演算子を使うと、より短く書けます。
C#string text = "abc";
int number = int.TryParse(text, out int parsed) ? parsed : 0;
Console.WriteLine(number); // 0
設定ファイルの値などで、「不正な場合は初期値を使う」という処理に便利です。
C#string retryText = "invalid";
int retryCount = int.TryParse(retryText, out int parsedRetry)
? parsedRetry
: 3;
Console.WriteLine(retryCount); // 3
7-3. エラーメッセージを表示する
ユーザー入力では、変換に失敗したときにエラーメッセージを表示することがよくあります。
C#Console.WriteLine("年齢を入力してください:");
string? input = Console.ReadLine();
if (int.TryParse(input, out int age))
{
Console.WriteLine($"年齢: {age}");
}
else
{
Console.WriteLine("年齢は整数で入力してください。例: 20");
}
さらに、業務上の範囲チェックも組み合わせると実用的です。
C#Console.WriteLine("年齢を入力してください:");
string? input = Console.ReadLine();
if (!int.TryParse(input, out int age))
{
Console.WriteLine("年齢は整数で入力してください。");
}
else if (age < 0 || age > 120)
{
Console.WriteLine("年齢は0〜120の範囲で入力してください。");
}
else
{
Console.WriteLine($"登録された年齢: {age}");
}
int.TryParseは型として変換できるかを判定するだけなので、業務ルールに合っているかは別途チェックする必要があります。
7-4. LINQや配列処理で数値だけを取り出す
文字列の配列から、数値に変換できるものだけを取り出したい場合にもint.TryParseを使えます。
C#string[] values = { "10", "abc", "20", "3.5", "30" };
List<int> numbers = new List<int>();
foreach (string value in values)
{
if (int.TryParse(value, out int number))
{
numbers.Add(number);
}
}
foreach (int number in numbers)
{
Console.WriteLine(number);
}
実行結果です。
C#10
20
30
LINQと組み合わせる場合は、少し工夫が必要です。
C#string[] values = { "10", "abc", "20", "3.5", "30" };
var numbers = values
.Select(value => int.TryParse(value, out int number)
? (Success: true, Number: number)
: (Success: false, Number: 0))
.Where(x => x.Success)
.Select(x => x.Number)
.ToList();
foreach (int number in numbers)
{
Console.WriteLine(number);
}
初心者のうちは、まずforeachで書くほうがわかりやすくおすすめです。
7-5. 設定ファイルやCSVの値を安全に読み込む
設定ファイルやCSVから読み込んだ値は、必ず正しいとは限りません。
C#string maxCountText = "100";
int maxCount = int.TryParse(maxCountText, out int parsed)
? parsed
: 10;
Console.WriteLine(maxCount);
CSVの各行に数量が入っている場合の例です。
C#string[] csvValues = { "5", "10", "abc", "20" };
foreach (string value in csvValues)
{
if (int.TryParse(value, out int quantity))
{
Console.WriteLine($"数量: {quantity}");
}
else
{
Console.WriteLine($"不正な数量: {value}");
}
}
外部データを扱うときは、int.Parseで一気に変換するよりも、int.TryParseで安全にチェックしながら処理するほうが安心です。
8. NumberStylesやCultureInfoを使った応用
8-1. カンマ区切りの数値を変換する
int.TryParseには、NumberStylesやCultureInfoを指定できるオーバーロードがあります。
通常の書き方では、カンマ区切りの"1,234"は失敗します。
C#int.TryParse("1,234", out int number); // false
カンマ区切りを許可するには、次のように書きます。
C#using System.Globalization;
string text = "1,234";
bool success = int.TryParse(
text,
NumberStyles.AllowThousands,
CultureInfo.InvariantCulture,
out int number
);
Console.WriteLine(success); // True
Console.WriteLine(number); // 1234
NumberStyles.AllowThousandsを指定することで、桁区切り記号を含む文字列を変換できます。
8-2. 符号付きの数値を扱う
通常のint.TryParseでも、先頭の+や-は扱えます。
C#int.TryParse("+100", out int a); // true, 100
int.TryParse("-100", out int b); // true, -100
NumberStylesを使う場合は、符号を許可するスタイルを指定できます。
C#using System.Globalization;
string text = "-100";
bool success = int.TryParse(
text,
NumberStyles.AllowLeadingSign,
CultureInfo.InvariantCulture,
out int number
);
Console.WriteLine(success); // True
Console.WriteLine(number); // -100
ただし、実際には前後の空白も含めて扱いたいことが多いため、NumberStyles.Integerを使うこともあります。
C#bool success = int.TryParse(
" -100 ",
NumberStyles.Integer,
CultureInfo.InvariantCulture,
out int number
);
NumberStyles.Integerは、整数としてよく使われる形式に対応する指定です。
8-3. カルチャによる数値表記の違いに対応する
数値の表記は国や地域によって違うことがあります。
たとえば、桁区切りや小数点の記号はカルチャによって変わる場合があります。CultureInfoを指定すると、どの文化圏の表記として解釈するかを明示できます。
C#using System.Globalization;
string text = "1,234";
bool success = int.TryParse(
text,
NumberStyles.AllowThousands,
CultureInfo.GetCultureInfo("en-US"),
out int number
);
Console.WriteLine(success); // True
Console.WriteLine(number); // 1234
日本国内向けのアプリでも、CSVや外部システム連携では表記ゆれが起きることがあります。数値フォーマットが決まっている場合は、CultureInfo.InvariantCultureを使って環境差を減らすのもよくある方法です。
C#CultureInfo.InvariantCulture
InvariantCultureは、特定の国や地域に依存しにくい固定的なカルチャとして使われます。
8-4. overloadを使うべきケース
int.TryParseには複数のオーバーロードがあります。初心者が最初に覚えるべきなのは次の形です。
C#int.TryParse(stringValue, out int result)
カンマ区切りやカルチャを考慮したい場合は、次の形を使います。
C#int.TryParse(stringValue, numberStyles, cultureInfo, out int result)
たとえば、次のようなケースではオーバーロードを検討します。
C#"1,234" // 桁区切りを許可したい
"+123" // 符号を明示的に扱いたい
" 123 " // 空白を許可したい
サンプルです。
C#using System.Globalization;
string text = "1,234";
if (int.TryParse(
text,
NumberStyles.AllowThousands,
CultureInfo.InvariantCulture,
out int number))
{
Console.WriteLine(number);
}
else
{
Console.WriteLine("変換できませんでした");
}
通常の整数文字列だけなら基本形で十分です。表記ゆれや外部データに対応したい場合は、NumberStylesとCultureInfoを使いましょう。
9. int.TryParseの注意点
9-1. trueが返っても業務上有効な値とは限らない
int.TryParseがtrueを返すのは、あくまでint型に変換できたという意味です。
たとえば、年齢として-1は不自然ですが、intとしては変換できます。
C#bool success = int.TryParse("-1", out int age);
Console.WriteLine(success); // True
Console.WriteLine(age); // -1
そのため、業務上の条件は別途チェックする必要があります。
C#if (int.TryParse(input, out int age) && age >= 0 && age <= 120)
{
Console.WriteLine("有効な年齢です");
}
else
{
Console.WriteLine("年齢の入力が正しくありません");
}
TryParseは型チェック、範囲チェックは別処理、と考えるとわかりやすいです。
9-2. 0と変換失敗を混同しない
変換に失敗したとき、out変数には0が入ります。
C#int.TryParse("abc", out int number);
Console.WriteLine(number); // 0
しかし、"0"を変換した場合も結果は0です。
C#int.TryParse("0", out int number);
Console.WriteLine(number); // 0
つまり、number == 0だけでは変換に失敗したかどうかは判断できません。
必ず戻り値のboolを確認しましょう。
C#bool success = int.TryParse(input, out int number);
if (success)
{
Console.WriteLine($"変換成功: {number}");
}
else
{
Console.WriteLine("変換失敗");
}
9-3. 小数やlong型の値には別のTryParseを使う
int.TryParseはint型への変換専用です。
小数を扱いたい場合は、double.TryParseやdecimal.TryParseを使います。
C#double.TryParse("123.45", out double doubleValue);
decimal.TryParse("123.45", out decimal decimalValue);
intより大きな整数を扱いたい場合は、long.TryParseを使います。
C#long.TryParse("999999999999", out long longValue);
日付を扱いたい場合は、DateTime.TryParseを使います。
C#DateTime.TryParse("2026/06/07", out DateTime date);
変換したい型に合ったTryParseを選ぶことが重要です。
9-4. 変換後に範囲チェックが必要なケース
int.TryParseで変換できても、その値がアプリケーションとして有効とは限りません。
数量なら1以上、月なら1〜12、点数なら0〜100など、用途ごとの範囲があります。
C#string input = "150";
if (int.TryParse(input, out int score))
{
if (score >= 0 && score <= 100)
{
Console.WriteLine("有効な点数です");
}
else
{
Console.WriteLine("点数は0〜100で入力してください");
}
}
else
{
Console.WriteLine("整数を入力してください");
}
int.TryParseは「整数として読めるか」を確認するだけです。実務では、その後に「業務ルールとして正しいか」をチェックしましょう。
10. int.TryParseに関するよくある質問
10-1. int.TryParseは例外を投げることがある?
通常の使い方では、int.TryParseは変換に失敗しても例外を投げず、falseを返します。
C#bool success = int.TryParse("abc", out int number);
Console.WriteLine(success); // False
これがint.Parseとの大きな違いです。
ただし、NumberStylesを指定するオーバーロードで不正なスタイルを指定するなど、使い方自体が不正な場合には例外が発生する可能性があります。通常のint.TryParse(string, out int)を使う範囲では、入力文字列が不正だからといって例外で止まる心配は基本的にありません。
10-2. 失敗時の戻り値とout変数の値は?
変換に失敗した場合、戻り値はfalseです。
C#bool success = int.TryParse("abc", out int number);
Console.WriteLine(success); // False
基本的なint.TryParse(string, out int)では、失敗時のout変数には0が入ります。
C#Console.WriteLine(number); // 0
ただし、失敗時の0を有効な値として扱わないようにしましょう。必ず戻り値のsuccessで判断します。
C#if (success)
{
Console.WriteLine(number);
}
else
{
Console.WriteLine("変換できませんでした");
}
10-3. int.TryParseとConvert.ToInt32の違いは?
Convert.ToInt32も値をintに変換するためのメソッドです。
C#int number = Convert.ToInt32("123");
正しい数値文字列なら変換できます。
ただし、変換できない文字列では例外が発生します。
C#int number = Convert.ToInt32("abc"); // 例外
また、Convert.ToInt32(null)は0になります。
C#int number = Convert.ToInt32(null);
Console.WriteLine(number); // 0
一方、int.TryParse(null, out int number)はfalseを返します。
C#bool success = int.TryParse(null, out int number);
Console.WriteLine(success); // False
Console.WriteLine(number); // 0
入力値が正しいかわからない場合は、Convert.ToInt32よりint.TryParseのほうが安全に扱いやすいです。
10-4. double.TryParseやDateTime.TryParseとの違いは?
int.TryParse、double.TryParse、DateTime.TryParseは、どれも「変換を試して、成功したかどうかをboolで返す」という考え方は同じです。
違いは、変換先の型です。
C#int.TryParse("123", out int intValue);
double.TryParse("123.45", out double doubleValue);
DateTime.TryParse("2026/06/07", out DateTime dateValue);
整数にしたいならint.TryParse、小数にしたいならdouble.TryParseやdecimal.TryParse、日付にしたいならDateTime.TryParseを使います。
文字列の内容に合わせて、適切な型のTryParseを選びましょう。
10-5. 初心者はParseとTryParseのどちらを使えばよい?
初心者には、まずint.TryParseをおすすめします。
理由は、変換に失敗しても例外でプログラムが止まりにくく、成功・失敗をif文でわかりやすく書けるからです。
C#if (int.TryParse(input, out int number))
{
Console.WriteLine($"数値: {number}");
}
else
{
Console.WriteLine("数値を入力してください");
}
int.Parseは、値が必ず数値だとわかっている場合に使うとよいです。
C#int number = int.Parse("123");
ユーザー入力や外部ファイルの値を扱う場合は、基本的にint.TryParseを使うと安全です。
まとめ
int.TryParseは、C#で文字列をint型に安全に変換するための便利なメソッドです。
基本構文は次の形です。
C#bool success = int.TryParse(input, out int number);
戻り値のsuccessには変換に成功したかどうかが入り、out引数のnumberには変換後の整数が入ります。
変換に成功した場合はtrue、失敗した場合はfalseが返ります。
C#if (int.TryParse("123", out int number))
{
Console.WriteLine(number);
}
else
{
Console.WriteLine("変換できませんでした");
}
int.Parseは変換できない文字列で例外が発生しますが、int.TryParseは失敗時にfalseを返すため、ユーザー入力やCSV、設定ファイルなど、不正な値が入る可能性のあるデータを扱う場面に向いています。
また、失敗時のout変数には0が入るため、0と変換失敗を混同しないことが大切です。必ず戻り値のboolを確認しましょう。
カンマ区切りやカルチャを考慮したい場合は、NumberStylesやCultureInfoを指定するオーバーロードを使います。
C#using System.Globalization;
int.TryParse(
"1,234",
NumberStyles.AllowThousands,
CultureInfo.InvariantCulture,
out int number
);
初心者がC#で文字列から数値へ変換するなら、まずはint.TryParseを使った安全な書き方を身につけるのがおすすめです。

