C#のParseとは?型変換の使い方・TryParseとの違い・エラー対策を初心者向けに解説
はじめに
C#でプログラムを書いていると、文字列として受け取った値を数値や日付、真偽値などに変換したい場面がよくあります。たとえば、コンソールから入力された「123」という文字列を計算に使うには、int型などの数値型に変換する必要があります。
このようなときに使う代表的なメソッドがParseです。
C#のParseは、文字列を指定した型に変換するための便利な機能です。ただし、変換できない文字列を渡すと例外が発生するため、使い方を間違えるとプログラムが途中で止まってしまうことがあります。
この記事では、C#のParseの基本的な使い方、TryParseとの違い、よくあるエラーと対策、実務での使い分けまで初心者向けに解説します。
1. C#のParseとは?文字列を別の型に変換するメソッド
1-1. Parseは「文字列を数値・日付などの型に変換する」機能
C#のParseとは、文字列を別の型に変換するためのメソッドです。
たとえば、次のように文字列の"100"を整数の100に変換できます。
C#string text = "100";
int number = int.Parse(text);
Console.WriteLine(number + 50); // 150
textは文字列型のstringですが、int.Parseを使うことで整数型のintに変換できます。
文字列のままだと数値計算はできません。たとえば"100"と"50"をそのまま足すと、数値の足し算ではなく文字列の連結として扱われる場合があります。
C#string a = "100";
string b = "50";
Console.WriteLine(a + b); // 10050
一方、Parseで数値に変換すれば、計算として扱えます。
C#int a = int.Parse("100");
int b = int.Parse("50");
Console.WriteLine(a + b); // 150
このように、Parseは文字列として受け取ったデータを、プログラム内で扱いやすい型に変換するために使います。
1-2. C#でParseがよく使われる場面
C#でParseがよく使われる場面には、次のようなものがあります。
コンソールアプリでユーザーが入力した値を数値に変換する場面です。Console.ReadLine()の戻り値はstring型なので、入力された数字を計算に使うにはint.Parseなどで変換する必要があります。
C#Console.Write("年齢を入力してください: ");
string input = Console.ReadLine();
int age = int.Parse(input);
Console.WriteLine($"あなたは{age}歳です。");
Webフォームや画面入力の値を変換する場面でも使われます。画面から送られてくる値は基本的に文字列なので、数量や価格、日付などとして扱うには型変換が必要です。
CSVやテキストファイルから読み込んだ値を変換する場面でもParseはよく使われます。ファイル内の値は文字列として読み込まれるため、数値や日付として処理するには変換が必要です。
設定ファイルから取得した値をboolやintに変換する場面でも使われます。たとえば、"true"という文字列をbool型のtrueに変換できます。
1-3. Parseで変換できる主な型
C#では、さまざまな型にParseメソッドが用意されています。
代表的なものは次のとおりです。
C#int number = int.Parse("123");
double value = double.Parse("12.34");
decimal price = decimal.Parse("1000.50");
DateTime date = DateTime.Parse("2026/06/15");
bool flag = bool.Parse("true");
よく使われる型としては、int、long、float、double、decimal、DateTime、boolなどがあります。
整数を扱うならint.Parse、小数を扱うならdouble.Parseやdecimal.Parse、日付を扱うならDateTime.Parse、真偽値を扱うならbool.Parseを使います。
金額のように誤差を避けたい数値にはdecimalがよく使われます。一方、計測値や一般的な小数計算ではdoubleが使われることがあります。
1-4. Parseは「変換できない値」だと例外が発生する
Parseを使ううえで重要なのは、変換できない値を渡すと例外が発生するという点です。
たとえば、次のコードはエラーになります。
C#int number = int.Parse("abc");
"abc"は整数として解釈できないため、FormatExceptionが発生します。
また、nullを渡した場合もエラーになります。
C#string text = null;
int number = int.Parse(text);
この場合はArgumentNullExceptionが発生します。
さらに、int型の範囲を超える大きすぎる数値を変換しようとすると、OverflowExceptionが発生します。
C#int number = int.Parse("999999999999999999999");
つまり、Parseは「正しい形式の文字列が必ず渡される」とわかっている場合に向いています。ユーザー入力のように、どんな値が入るかわからない場面では、後述するTryParseを使うほうが安全です。
2. C#のParseの基本的な使い方
2-1. int.Parseで文字列を整数に変換する
int.Parseは、文字列を整数型のintに変換するメソッドです。
C#string text = "123";
int number = int.Parse(text);
Console.WriteLine(number); // 123
変換後はint型になるため、計算に使えます。
C#string text = "123";
int number = int.Parse(text);
Console.WriteLine(number * 2); // 246
ただし、小数や文字が含まれている文字列はint.Parseでは変換できません。
C#int.Parse("12.3"); // エラー
int.Parse("abc"); // エラー
整数として変換したい場合は、文字列が整数の形式になっている必要があります。
2-2. double.Parseで文字列を小数に変換する
double.Parseは、文字列を小数を扱えるdouble型に変換します。
C#string text = "12.34";
double value = double.Parse(text);
Console.WriteLine(value); // 12.34
double型に変換すると、小数を含む計算ができます。
C#double width = double.Parse("10.5");
double height = double.Parse("2.0");
Console.WriteLine(width * height); // 21
ただし、小数点の表記は実行環境のカルチャ設定に影響される場合があります。日本語環境では一般的に12.34のような形式が使われますが、国や地域によっては小数点にカンマを使うことがあります。
そのため、国際化対応が必要なアプリでは、CultureInfoを指定した変換を検討します。
2-3. decimal.Parseで金額などの数値を変換する
decimal.Parseは、文字列をdecimal型に変換します。
C#string text = "1200.50";
decimal price = decimal.Parse(text);
Console.WriteLine(price); // 1200.50
decimalは、金額や会計処理など、誤差をできるだけ避けたい数値に向いています。
C#decimal price = decimal.Parse("1980");
decimal taxRate = decimal.Parse("0.10");
decimal tax = price * taxRate;
Console.WriteLine(tax); // 198.00
doubleは浮動小数点型のため、計算内容によってはわずかな誤差が発生することがあります。金額を扱う場合は、基本的にdecimalを使うのが一般的です。
2-4. DateTime.Parseで文字列を日付に変換する
DateTime.Parseは、文字列を日付や時刻を扱うDateTime型に変換します。
C#string text = "2026/06/15";
DateTime date = DateTime.Parse(text);
Console.WriteLine(date);
日付に変換すると、年・月・日を取り出したり、日付計算を行ったりできます。
C#DateTime date = DateTime.Parse("2026/06/15");
Console.WriteLine(date.Year); // 2026
Console.WriteLine(date.Month); // 6
Console.WriteLine(date.Day); // 15
日付文字列は、環境や形式によって解釈が変わる可能性があります。たとえば、"01/02/2026"が「2026年1月2日」なのか「2026年2月1日」なのかは、国や地域の設定によって変わる場合があります。
明確な形式で日付を扱いたい場合は、DateTime.ParseExactやDateTime.TryParseExactを使うと安全です。
2-5. bool.Parseで文字列を真偽値に変換する
bool.Parseは、文字列をbool型に変換します。
C#string text = "true";
bool flag = bool.Parse(text);
Console.WriteLine(flag); // True
bool.Parseで変換できる代表的な文字列は"true"と"false"です。大文字小文字は区別されません。
C#bool a = bool.Parse("true");
bool b = bool.Parse("True");
bool c = bool.Parse("FALSE");
Console.WriteLine(a); // True
Console.WriteLine(b); // True
Console.WriteLine(c); // False
ただし、"1"や"0"はbool.Parseでは基本的に変換できません。
C#bool.Parse("1"); // エラー
設定ファイルなどでtrueやfalseという文字列を読み取る場合に便利です。
3. Parseを使うときのコード例
3-1. 文字列の数字をint型に変換する例
もっとも基本的なParseの例は、文字列の数字をint型に変換するコードです。
C#string text = "500";
int number = int.Parse(text);
Console.WriteLine(number + 100); // 600
"500"は文字列ですが、int.Parseによって整数の500に変換されます。
変換後は、足し算、引き算、掛け算、割り算などの計算に使えます。
C#string priceText = "1200";
int price = int.Parse(priceText);
int total = price * 3;
Console.WriteLine(total); // 3600
3-2. 入力フォームの値を数値に変換する例
ユーザー入力は文字列として取得されることが多いため、数値として扱うには変換が必要です。
C#Console.Write("数量を入力してください: ");
string input = Console.ReadLine();
int quantity = int.Parse(input);
int price = 1000;
int total = price * quantity;
Console.WriteLine($"合計金額は{total}円です。");
このコードでは、ユーザーが入力した数量をint.Parseで整数に変換しています。
ただし、ユーザーがabcや空文字を入力するとエラーになります。そのため、実際のアプリケーションではint.TryParseを使って入力チェックするのが安全です。
3-3. CSVやテキストファイルの値を変換する例
CSVファイルやテキストファイルから読み込んだデータは、多くの場合文字列として扱われます。
たとえば、次のようなCSVデータがあるとします。
1001,りんご,120
1002,みかん,80
このデータを読み込んだ場合、商品IDや価格も最初は文字列です。数値として扱うにはParseで変換します。
C#string line = "1001,りんご,120";
string[] columns = line.Split(',');
int id = int.Parse(columns[0]);
string name = columns[1];
int price = int.Parse(columns[2]);
Console.WriteLine($"{id}: {name} は {price}円です。");
CSVやテキストファイルでは、空欄や不正な値が含まれることがあります。外部ファイルの内容が必ず正しいとは限らないため、実務ではTryParseを使うことが多いです。
3-4. 日付文字列をDateTime型に変換する例
日付文字列をDateTime型に変換すると、日付の比較や加算ができます。
C#string text = "2026/06/15";
DateTime date = DateTime.Parse(text);
DateTime nextWeek = date.AddDays(7);
Console.WriteLine(nextWeek); // 2026/06/22
日付に変換すれば、今日より前か後かを判定することもできます。
C#DateTime deadline = DateTime.Parse("2026/06/30");
if (deadline >= DateTime.Today)
{
Console.WriteLine("期限内です。");
}
else
{
Console.WriteLine("期限切れです。");
}
日付は形式の違いによるトラブルが起きやすいため、入力形式を固定できる場合はParseExactやTryParseExactを使うとより安全です。
4. C#のParseで発生しやすいエラーと原因
4-1. FormatException:形式が正しくない
FormatExceptionは、文字列の形式が変換先の型に合っていない場合に発生します。
C#int number = int.Parse("abc");
"abc"は整数ではないため、int.Parseで変換できません。
小数をint.Parseで変換しようとした場合もエラーになります。
C#int number = int.Parse("12.5");
intは整数型なので、"12.5"のような小数はそのまま変換できません。
日付でも、解釈できない形式の文字列を渡すとFormatExceptionが発生します。
C#DateTime date = DateTime.Parse("日付です");
FormatExceptionを防ぐには、変換前に文字列の形式を確認するか、TryParseを使います。
4-2. ArgumentNullException:nullをParseした
Parseにnullを渡すと、ArgumentNullExceptionが発生します。
C#string text = null;
int number = int.Parse(text);
nullは「値が存在しない」状態です。"123"のような文字列ではないため、Parseできません。
ユーザー入力、データベース、外部API、設定ファイルなどから取得した値は、nullになる可能性があります。そのため、Parseする前にnullチェックを行うことが大切です。
C#string text = null;
if (text != null)
{
int number = int.Parse(text);
}
else
{
Console.WriteLine("値がありません。");
}
より簡潔にチェックしたい場合は、string.IsNullOrEmptyやstring.IsNullOrWhiteSpaceを使います。
4-3. OverflowException:型の範囲を超えている
OverflowExceptionは、変換しようとした値が型の範囲を超えている場合に発生します。
C#int number = int.Parse("999999999999999999999");
int型には扱える範囲があります。その範囲を超える数値はintに変換できません。
大きな数値を扱う場合は、longやdecimalなど、より大きな範囲を扱える型を検討します。
C#long number = long.Parse("9999999999");
ただし、longにも上限はあります。どの型を使うべきかは、扱うデータの範囲に合わせて選ぶ必要があります。
4-4. 全角数字・空白・カンマ・小数点による変換エラー
Parseでは、見た目では数字に見えても変換できない場合があります。
たとえば、全角数字です。
C#int number = int.Parse("123");
環境や指定する設定によって扱いが変わることがあるため、全角数字が入力される可能性がある場合は注意が必要です。
前後に空白がある場合は、型によっては変換できることもありますが、予期しないエラーを避けるためにTrimで取り除いておくと安全です。
C#string text = " 123 ";
int number = int.Parse(text.Trim());
カンマ付きの数値も注意が必要です。
C#int number = int.Parse("1,000");
カンマを許可するかどうかは、使用する型や指定するNumberStylesによって変わります。単純なint.Parseでは意図どおりに変換できない場合があるため、カンマを含む数値を扱う場合は形式を明確にしましょう。
小数点も変換先の型によって扱いが異なります。double.Parse("12.5")は変換できますが、int.Parse("12.5")はエラーになります。
4-5. 日付形式やカルチャの違いによるエラー
DateTime.Parseやdouble.Parseでは、カルチャの違いによって結果が変わることがあります。
たとえば、日付の"01/02/2026"は、環境によって「1月2日」と解釈される場合もあれば、「2月1日」と解釈される場合もあります。
また、小数点の表記も国や地域によって異なります。日本では12.34のようにピリオドを使うことが一般的ですが、地域によっては12,34のようにカンマを使うことがあります。
このような違いを避けたい場合は、形式やカルチャを明示して変換します。
C#using System.Globalization;
string text = "2026-06-15";
DateTime date = DateTime.ParseExact(
text,
"yyyy-MM-dd",
CultureInfo.InvariantCulture
);
日付や小数を扱う場合は、入力形式を固定し、必要に応じてParseExactやTryParseExactを使うのが安全です。
5. Parseのエラー対策
5-1. try-catchで例外処理を行う
Parseで発生する例外を処理するには、try-catchを使います。
C#try
{
int number = int.Parse("abc");
Console.WriteLine(number);
}
catch (FormatException)
{
Console.WriteLine("数値の形式が正しくありません。");
}
tryブロックの中でエラーが発生すると、対応するcatchブロックが実行されます。
複数の例外を分けて処理することもできます。
C#try
{
string text = "999999999999999999999";
int number = int.Parse(text);
}
catch (FormatException)
{
Console.WriteLine("形式が正しくありません。");
}
catch (OverflowException)
{
Console.WriteLine("数値が大きすぎます。");
}
catch (ArgumentNullException)
{
Console.WriteLine("値がnullです。");
}
ただし、ユーザー入力のように失敗がよく起こる処理で、毎回例外を前提にするのはおすすめできません。変換できるかどうかを判定したい場合は、TryParseを使うほうが自然です。
5-2. 事前にnullや空文字をチェックする
Parseする前に、nullや空文字をチェックしておくとエラーを防げます。
C#string input = "";
if (!string.IsNullOrEmpty(input))
{
int number = int.Parse(input);
}
else
{
Console.WriteLine("値を入力してください。");
}
空白だけの文字列も無効にしたい場合は、string.IsNullOrWhiteSpaceを使います。
C#string input = " ";
if (!string.IsNullOrWhiteSpace(input))
{
int number = int.Parse(input);
}
else
{
Console.WriteLine("有効な値を入力してください。");
}
IsNullOrWhiteSpaceは、null、空文字、空白だけの文字列をまとめて判定できるため、入力チェックでよく使われます。
5-3. Trimで前後の空白を取り除く
ユーザー入力では、前後に余分な空白が入ることがあります。
C#string input = " 123 ";
int number = int.Parse(input.Trim());
Trimを使うと、文字列の前後にある空白を取り除けます。
C#string input = " 500 ";
string trimmed = input.Trim();
int number = int.Parse(trimmed);
Console.WriteLine(number); // 500
ただし、Trimで取り除けるのは基本的に前後の空白です。文字列の途中に含まれるカンマや記号、不正な文字は取り除かれません。
C#string input = "1,000";
このような値を扱う場合は、カンマを許可する変換方法を使うか、事前に形式を整える必要があります。
5-4. 入力値の形式をチェックしてからParseする
Parseする前に、入力値が期待した形式になっているか確認すると安全です。
たとえば、整数だけを受け付けたい場合は、すべての文字が数字かどうかを確認できます。
C#string input = "123";
if (input.All(char.IsDigit))
{
int number = int.Parse(input);
Console.WriteLine(number);
}
else
{
Console.WriteLine("数字だけを入力してください。");
}
ただし、この方法ではマイナス記号や小数点には対応できません。入力ルールが複雑になる場合は、正規表現やTryParseを使うほうが扱いやすくなります。
実務では、形式チェックと変換をまとめて行えるTryParseがよく使われます。
5-5. ユーザー入力にはParseよりTryParseを使う
ユーザー入力では、どんな値が入力されるかわかりません。
数値を入力してほしい場面でも、空文字、文字列、記号、大きすぎる数値などが入力される可能性があります。
このような場面でParseを使うと、例外が発生しやすくなります。
C#Console.Write("数値を入力してください: ");
string input = Console.ReadLine();
int number = int.Parse(input); // 入力内容によってはエラー
安全に変換したい場合は、TryParseを使います。
C#Console.Write("数値を入力してください: ");
string input = Console.ReadLine();
if (int.TryParse(input, out int number))
{
Console.WriteLine($"入力された数値は{number}です。");
}
else
{
Console.WriteLine("数値を入力してください。");
}
ユーザー入力、外部ファイル、APIレスポンスなど、値が正しいと保証できない場面では、基本的にTryParseを使うのがおすすめです。
6. TryParseとは?Parseとの違い
6-1. TryParseは変換に失敗しても例外を出さない
TryParseは、文字列を指定した型に変換するメソッドですが、Parseと違って変換に失敗しても例外を発生させません。
C#bool result = int.TryParse("abc", out int number);
この場合、"abc"は整数に変換できませんが、例外は発生しません。代わりに、戻り値としてfalseが返ります。
C#if (int.TryParse("abc", out int number))
{
Console.WriteLine(number);
}
else
{
Console.WriteLine("変換できませんでした。");
}
プログラムを止めずに変換失敗を扱えるため、ユーザー入力や外部データの処理に向いています。
6-2. TryParseは成功・失敗をboolで返す
TryParseの戻り値はbool型です。
変換に成功した場合はtrue、失敗した場合はfalseを返します。
C#bool success = int.TryParse("123", out int number);
Console.WriteLine(success); // True
Console.WriteLine(number); // 123
変換に失敗した場合は、戻り値がfalseになります。
C#bool success = int.TryParse("abc", out int number);
Console.WriteLine(success); // False
Console.WriteLine(number); // 0
失敗した場合、outで受け取る変数にはその型の既定値が入ります。intなら0、boolならfalse、DateTimeなら既定の日付値になります。
ただし、失敗時の値を使うのではなく、必ず戻り値のtrueまたはfalseで判定して処理を分けることが大切です。
6-3. outキーワードで変換後の値を受け取る
TryParseでは、変換後の値をoutキーワードで受け取ります。
C#int.TryParse("123", out int number);
このコードでは、変換に成功した場合、numberに整数の123が入ります。
よく使う書き方は、if文と組み合わせる形です。
C#string input = "123";
if (int.TryParse(input, out int number))
{
Console.WriteLine($"変換成功: {number}");
}
else
{
Console.WriteLine("変換失敗");
}
この書き方なら、変換に成功したときだけnumberを使うことができます。
DateTimeやdecimalでも同じように使えます。
C#if (DateTime.TryParse("2026/06/15", out DateTime date))
{
Console.WriteLine(date);
}
if (decimal.TryParse("1200.50", out decimal price))
{
Console.WriteLine(price);
}
6-4. ParseとTryParseの書き方の違い
ParseとTryParseの大きな違いは、失敗時の扱いです。
Parseは、変換できることを前提にして値を返します。
C#int number = int.Parse("123");
変換に失敗すると例外が発生します。
一方、TryParseは、変換できるかどうかを判定しながら値を受け取ります。
C#if (int.TryParse("123", out int number))
{
Console.WriteLine(number);
}
Parseはコードが短く書けますが、失敗すると例外が出ます。
TryParseは少しコードが長くなりますが、安全に失敗を扱えます。
固定値や内部データのように、形式が正しいと保証できる場合はParseでも問題ありません。ユーザー入力や外部データのように、値が不確実な場合はTryParseを使うのが基本です。
6-5. ParseとTryParseの使い分け早見表
ParseとTryParseは、次のように使い分けると理解しやすいです。
| 場面 | おすすめ |
|---|---|
| 固定文字列を変換する | Parse |
| 必ず正しい形式だと保証できる値を変換する | Parse |
| ユーザー入力を変換する | TryParse |
| CSVや外部ファイルの値を変換する | TryParse |
| APIや外部システムから受け取った値を変換する | TryParse |
| 変換失敗時にエラーメッセージを出したい | TryParse |
| 例外として扱うべき異常なデータを検出したい | Parseまたは例外処理 |
基本的には、「失敗する可能性があるならTryParse」と覚えておくとよいでしょう。
7. Parse・TryParse・Convert・キャストの違い
7-1. ParseとConvertの違い
Parseと似た型変換の方法にConvertがあります。
C#int number1 = int.Parse("123");
int number2 = Convert.ToInt32("123");
どちらも文字列の"123"をint型に変換できます。
大きな違いのひとつは、nullの扱いです。
C#string text = null;
int number = Convert.ToInt32(text);
Console.WriteLine(number); // 0
Convert.ToInt32(null)は0を返します。
一方、int.Parse(null)はArgumentNullExceptionになります。
C#string text = null;
int number = int.Parse(text); // エラー
この違いは重要です。nullを0として扱ってよい場合はConvert.ToInt32が便利ですが、nullを不正な値として検出したい場合はParseや明示的なチェックのほうが適しています。
7-2. Parseとキャストの違い
キャストは、ある型の値を別の型として扱うための構文です。
C#double value = 12.3;
int number = (int)value;
Console.WriteLine(number); // 12
この例では、double型の値をint型にキャストしています。
一方、Parseは文字列を別の型に変換します。
C#string text = "123";
int number = int.Parse(text);
つまり、Parseとキャストは使う場面が違います。
文字列の"123"を次のようにキャストすることはできません。
C#string text = "123";
int number = (int)text; // エラー
文字列から数値に変換したい場合は、Parse、TryParse、Convertなどを使います。
数値型同士の変換ではキャストを使うことがあります。
7-3. Convert.ToInt32を使うべき場面
Convert.ToInt32は、文字列や数値、真偽値などをint型に変換するメソッドです。
C#int a = Convert.ToInt32("123");
int b = Convert.ToInt32(12.7);
int c = Convert.ToInt32(true);
Console.WriteLine(a); // 123
Console.WriteLine(b); // 13
Console.WriteLine(c); // 1
Convert.ToInt32は、さまざまな型からintに変換したい場合に便利です。
また、nullを0として扱いたい場合にも使えます。
C#string text = null;
int number = Convert.ToInt32(text); // 0
ただし、nullが来たことをエラーとして扱いたい場合には向いていません。nullを0にしてしまうと、不正なデータに気づきにくくなることがあります。
そのため、Convert.ToInt32を使うべき場面は、「nullを既定値として扱っても問題ない」「文字列以外の値もまとめて変換したい」といったケースです。
7-4. 型変換方法の選び方
C#で型変換を行う方法は複数あります。初心者のうちは、次のように考えると選びやすくなります。
文字列から数値や日付に変換し、値が正しいとわかっている場合はParseを使います。
C#int number = int.Parse("123");
文字列から変換するが、失敗する可能性がある場合はTryParseを使います。
C#if (int.TryParse(input, out int number))
{
Console.WriteLine(number);
}
nullを既定値として扱いたい場合や、さまざまな型から変換したい場合はConvertを使います。
C#int number = Convert.ToInt32(value);
数値型同士の変換ではキャストを使います。
C#double value = 12.3;
int number = (int)value;
実務では、ユーザー入力や外部データにはTryParse、内部的に保証された値にはParse、型が混在する値にはConvert、数値型同士にはキャスト、という使い分けがよく使われます。
8. 初心者が迷いやすいParseの注意点
8-1. Parseできるのは基本的に文字列からの変換
Parseは、基本的に文字列を対象にした変換メソッドです。
C#int number = int.Parse("123");
Parseの引数には、変換したい文字列を渡します。
すでに数値型の値を別の数値型に変換したい場合は、ParseではなくキャストやConvertを使います。
C#double value = 12.3;
int number = (int)value;
初心者のうちは、文字列から変換するならParseまたはTryParse、数値型同士ならキャスト、と分けて考えると理解しやすいです。
8-2. null・空文字・不正な文字列はそのまま変換できない
Parseでは、null、空文字、不正な文字列をそのまま変換することはできません。
C#int.Parse(null); // エラー
int.Parse(""); // エラー
int.Parse("abc"); // エラー
空白だけの文字列もエラーになる可能性があります。
C#int.Parse(" "); // エラー
そのため、外部から受け取った値をParseする前には、必ず入力チェックを行うことが大切です。
C#if (!string.IsNullOrWhiteSpace(input))
{
int number = int.Parse(input);
}
ただし、このチェックだけでは"abc"のような不正な文字列は防げません。より安全に処理するならTryParseを使います。
8-3. ユーザー入力は信用せずTryParseで判定する
ユーザー入力は、常に正しいとは限りません。
数値を入力してほしい欄に、文字、記号、空白、想定外に大きい数値が入力される可能性があります。
C#Console.Write("年齢を入力してください: ");
string input = Console.ReadLine();
int age = int.Parse(input); // 危険
このようなコードは、入力内容によって例外が発生します。
安全に処理するには、TryParseで判定します。
C#Console.Write("年齢を入力してください: ");
string input = Console.ReadLine();
if (int.TryParse(input, out int age))
{
Console.WriteLine($"{age}歳ですね。");
}
else
{
Console.WriteLine("年齢は数字で入力してください。");
}
ユーザー入力にはParseではなくTryParseを使う、というルールで覚えておくと、多くのエラーを防げます。
8-4. 日付や小数は環境設定によって結果が変わることがある
日付や小数の変換では、カルチャの影響を受けることがあります。
C#DateTime date = DateTime.Parse("01/02/2026");
この日付がどのように解釈されるかは、環境によって変わる場合があります。
小数も同様です。
C#double value = double.Parse("12.34");
多くの環境では12.34として解釈されますが、地域設定によって小数点の記号が異なることがあります。
このような問題を避けるには、入力形式を統一し、CultureInfo.InvariantCultureやParseExactを使います。
C#using System.Globalization;
DateTime date = DateTime.ParseExact(
"2026-06-15",
"yyyy-MM-dd",
CultureInfo.InvariantCulture
);
日付や小数は、見た目が正しくても環境によって扱いが変わる可能性があるため、実務では特に注意が必要です。
8-5. 例外処理を前提にしたコードを書かない
Parseは変換に失敗すると例外を発生させます。
そのため、次のように例外処理だけで入力ミスを処理することもできます。
C#try
{
int number = int.Parse(input);
}
catch
{
Console.WriteLine("変換できませんでした。");
}
しかし、ユーザー入力のように失敗が普通に起こり得る処理では、例外処理を前提にするのはおすすめできません。
例外は本来、予期しない異常な状態を扱うための仕組みです。入力ミスのように事前に想定できるものは、TryParseで判定するほうが自然です。
C#if (int.TryParse(input, out int number))
{
Console.WriteLine(number);
}
else
{
Console.WriteLine("数値を入力してください。");
}
例外処理に頼りすぎず、失敗が予想できる場面ではTryParseを使うことが大切です。
9. 実務でよく使うParse・TryParseの実践パターン
9-1. コンソール入力をintに変換する
コンソール入力では、Console.ReadLine()で取得した値はstring型です。
C#Console.Write("点数を入力してください: ");
string input = Console.ReadLine();
if (int.TryParse(input, out int score))
{
Console.WriteLine($"点数は{score}点です。");
}
else
{
Console.WriteLine("点数は整数で入力してください。");
}
ユーザーが正しい整数を入力した場合だけ、scoreを使います。
点数の範囲もチェックしたい場合は、変換後に条件を追加します。
C#if (int.TryParse(input, out int score) && score >= 0 && score <= 100)
{
Console.WriteLine($"点数は{score}点です。");
}
else
{
Console.WriteLine("0から100までの整数を入力してください。");
}
このように、TryParseと条件式を組み合わせると、実用的な入力チェックができます。
9-2. Webフォームの入力値を数値に変換する
Webフォームから送信される値は、多くの場合文字列として扱われます。
C#string quantityText = "3";
if (int.TryParse(quantityText, out int quantity))
{
int price = 1000;
int total = price * quantity;
Console.WriteLine($"合計金額: {total}円");
}
else
{
Console.WriteLine("数量は数字で入力してください。");
}
Webフォームでは、未入力や不正な文字列が送信されることがあります。そのため、int.Parseでいきなり変換するよりも、int.TryParseで確認するほうが安全です。
金額を扱う場合はdecimal.TryParseを使うこともあります。
C#string priceText = "1980.50";
if (decimal.TryParse(priceText, out decimal price))
{
Console.WriteLine($"価格: {price}円");
}
else
{
Console.WriteLine("価格の形式が正しくありません。");
}
9-3. 設定ファイルの文字列をboolに変換する
設定ファイルでは、機能のオン・オフをtrueやfalseの文字列で管理することがあります。
C#string enabledText = "true";
if (bool.TryParse(enabledText, out bool isEnabled))
{
if (isEnabled)
{
Console.WriteLine("機能は有効です。");
}
else
{
Console.WriteLine("機能は無効です。");
}
}
else
{
Console.WriteLine("設定値が正しくありません。");
}
設定ファイルの値は管理者が編集する場合もあるため、必ず正しいとは限りません。
bool.Parseでも変換できますが、設定ミスでアプリケーションが停止しないようにするにはbool.TryParseを使うと安全です。
値が必ずtrueまたはfalseであると保証されている場合は、bool.Parseでも問題ありません。
9-4. 日付入力をDateTimeに変換する
日付入力を扱う場合も、DateTime.TryParseを使うと安全です。
C#string dateText = "2026/06/15";
if (DateTime.TryParse(dateText, out DateTime date))
{
Console.WriteLine($"入力された日付: {date:yyyy年MM月dd日}");
}
else
{
Console.WriteLine("日付の形式が正しくありません。");
}
日付形式を固定したい場合は、DateTime.TryParseExactを使います。
C#using System.Globalization;
string dateText = "2026-06-15";
if (DateTime.TryParseExact(
dateText,
"yyyy-MM-dd",
CultureInfo.InvariantCulture,
DateTimeStyles.None,
out DateTime date))
{
Console.WriteLine($"入力された日付: {date:yyyy年MM月dd日}");
}
else
{
Console.WriteLine("日付はyyyy-MM-dd形式で入力してください。");
}
日付は曖昧な形式だと誤解釈されることがあるため、入力形式を決めておくのがおすすめです。
9-5. 変換失敗時にエラーメッセージを表示する
実務では、変換に失敗したときにユーザーへわかりやすいエラーメッセージを表示することが重要です。
C#string input = "abc";
if (int.TryParse(input, out int number))
{
Console.WriteLine($"入力値: {number}");
}
else
{
Console.WriteLine("数値を入力してください。例: 100");
}
単に「エラーです」と表示するよりも、何を入力すればよいのかを伝えるほうが親切です。
日付の場合も同じです。
C#string input = "2026/15/06";
if (DateTime.TryParse(input, out DateTime date))
{
Console.WriteLine(date);
}
else
{
Console.WriteLine("日付は 2026/06/15 のような形式で入力してください。");
}
エラーメッセージでは、「何が悪いのか」と「どう直せばよいのか」を伝えると、ユーザーが修正しやすくなります。
10. C#のParseに関するよくある質問
10-1. ParseとTryParseはどちらを使えばいい?
基本的には、変換に失敗する可能性があるならTryParseを使います。
ユーザー入力、フォーム入力、CSV、テキストファイル、外部API、設定ファイルなど、外部から受け取る値は正しいとは限りません。そのため、TryParseを使うのが安全です。
C#if (int.TryParse(input, out int number))
{
Console.WriteLine(number);
}
else
{
Console.WriteLine("数値を入力してください。");
}
一方、プログラム内で固定している文字列や、事前に正しい形式だと保証されている値であればParseを使っても問題ありません。
C#int number = int.Parse("123");
迷った場合は、TryParseを選ぶと安全です。
10-2. int.Parseで空文字を変換するとどうなる?
int.Parseで空文字を変換すると、FormatExceptionが発生します。
C#int number = int.Parse("");
空文字は整数の形式ではないため、変換できません。
空文字の可能性がある場合は、事前にチェックします。
C#if (!string.IsNullOrWhiteSpace(input))
{
int number = int.Parse(input);
}
ただし、空文字以外にも"abc"のような不正な値が入る可能性があるため、実際にはTryParseを使うのがおすすめです。
C#if (int.TryParse(input, out int number))
{
Console.WriteLine(number);
}
else
{
Console.WriteLine("整数を入力してください。");
}
10-3. Parseでnullを変換するとどうなる?
Parseにnullを渡すと、ArgumentNullExceptionが発生します。
C#string text = null;
int number = int.Parse(text);
nullは文字列の値が存在しない状態なので、数値として解釈できません。
nullの可能性がある場合は、事前にチェックします。
C#if (text != null)
{
int number = int.Parse(text);
}
より実用的には、string.IsNullOrWhiteSpaceやTryParseを使います。
C#if (int.TryParse(text, out int number))
{
Console.WriteLine(number);
}
else
{
Console.WriteLine("有効な数値ではありません。");
}
なお、Convert.ToInt32(null)は0を返します。Parseとは動作が異なるため注意が必要です。
10-4. Parseで小数やカンマ付き数値は変換できる?
小数は、変換先の型によって扱いが変わります。
double.Parseやdecimal.Parseなら、小数を変換できます。
C#double value = double.Parse("12.34");
decimal price = decimal.Parse("1200.50");
一方、int.Parseでは小数を変換できません。
C#int number = int.Parse("12.34"); // エラー
カンマ付き数値は、単純なParseではうまく変換できない場合があります。
カンマを含む数値を扱いたい場合は、NumberStylesを指定します。
C#using System.Globalization;
string text = "1,000";
int number = int.Parse(
text,
NumberStyles.AllowThousands,
CultureInfo.InvariantCulture
);
Console.WriteLine(number); // 1000
ユーザー入力でカンマ付き数値を受け付ける場合は、TryParseでも同じようにNumberStylesを指定できます。
C#if (int.TryParse(
text,
NumberStyles.AllowThousands,
CultureInfo.InvariantCulture,
out int number))
{
Console.WriteLine(number);
}
else
{
Console.WriteLine("数値の形式が正しくありません。");
}
10-5. DateTime.ParseとDateTime.TryParseの違いは?
DateTime.Parseは、文字列をDateTime型に変換します。変換に失敗すると例外が発生します。
C#DateTime date = DateTime.Parse("2026/06/15");
不正な日付文字列を渡すとエラーになります。
C#DateTime date = DateTime.Parse("abc"); // エラー
一方、DateTime.TryParseは、変換に失敗しても例外を出さず、falseを返します。
C#if (DateTime.TryParse("2026/06/15", out DateTime date))
{
Console.WriteLine(date);
}
else
{
Console.WriteLine("日付の形式が正しくありません。");
}
日付入力のように、失敗する可能性がある場合はDateTime.TryParseを使うのがおすすめです。
また、日付形式を厳密に指定したい場合は、DateTime.ParseExactやDateTime.TryParseExactを使います。
C#using System.Globalization;
if (DateTime.TryParseExact(
"2026-06-15",
"yyyy-MM-dd",
CultureInfo.InvariantCulture,
DateTimeStyles.None,
out DateTime date))
{
Console.WriteLine(date);
}
まとめ
C#のParseは、文字列を数値、日付、真偽値などの型に変換するためのメソッドです。
int.Parseを使えば文字列を整数に、double.Parseやdecimal.Parseを使えば小数に、DateTime.Parseを使えば日付に、bool.Parseを使えば真偽値に変換できます。
ただし、Parseは変換できない文字列を渡すと例外が発生します。形式が正しくない場合はFormatException、nullを渡した場合はArgumentNullException、型の範囲を超える値を渡した場合はOverflowExceptionが発生します。
そのため、ユーザー入力や外部ファイル、APIなど、値が正しいと保証できない場面ではParseよりもTryParseを使うのが安全です。
TryParseは、変換に成功したかどうかをboolで返し、失敗しても例外を発生させません。入力チェックと型変換を同時に行えるため、実務でもよく使われます。
Parse、TryParse、Convert、キャストにはそれぞれ役割があります。文字列から安全に変換したい場合はTryParse、正しい値だとわかっている場合はParse、nullを既定値として扱いたい場合やさまざまな型から変換したい場合はConvert、数値型同士の変換ではキャストを使うとよいでしょう。
C#で型変換を正しく扱えるようになると、ユーザー入力、ファイル読み込み、設定値の処理、日付計算など、さまざまな場面で安定したコードを書けるようになります。

