C#でParseIntは使える?int.Parse・TryParse・Convert.ToInt32の違いと安全な数値変換方法
はじめに
C#で文字列を整数に変換しようとして「parseInt」「ParseInt」と検索する人は多いですが、結論から言うと、C#にはJavaScriptのようなグローバル関数としてのparseInt()は存在しません。
C#で文字列をintに変換する場合は、主に次の3つを使います。
C#int.Parse("123");
int.TryParse("123", out int value);
Convert.ToInt32("123");
どれも「文字列や値を整数に変換する」ために使えますが、失敗したときの挙動、nullを渡したときの挙動、安全性が異なります。
特に実務では、ユーザー入力、フォーム値、CSV、APIレスポンス、設定ファイルなど、必ずしも正しい数値だけが入ってくるとは限りません。そのため、単に変換できるかだけでなく、「変換に失敗してもアプリが落ちない書き方」を知っておくことが重要です。
この記事では、C#におけるParseIntの正体、int.Parse・int.TryParse・Convert.ToInt32の違い、安全な数値変換パターンを、コード例付きで解説します。
1. C#でParseIntは使える?結論から解説
1-1. C#にはparseInt関数は存在しない
C#には、JavaScriptのようにそのまま呼び出せるparseInt()関数はありません。
そのため、次のように書くとコンパイルエラーになります。
C#var number = parseInt("123"); // エラー
C#では、文字列を整数に変換するときはint.Parseやint.TryParseを使います。intはC#における整数型で、実体としては.NETのSystem.Int32に対応します。Microsoftの公式ドキュメントでも、Int32.ParseやInt32.TryParseは「文字列の数値表現を32ビット符号付き整数に変換する」ためのメソッドとして定義されています。
正しくは、次のように書きます。
C#int number = int.Parse("123");
または、安全性を重視するなら次のように書きます。
C#if (int.TryParse("123", out int number))
{
Console.WriteLine(number);
}
1-2. C#でParseIntの代わりに使う主な方法
C#でparseIntの代わりに使う主な方法は、次の3つです。
C#int value1 = int.Parse("123");
bool success = int.TryParse("123", out int value2);
int value3 = Convert.ToInt32("123");
それぞれの特徴は次のとおりです。
int.Parseは、文字列が必ず整数として正しいと分かっている場合に使います。失敗すると例外が発生します。
int.TryParseは、変換できるかどうか分からない値に使います。失敗しても例外を出さず、trueまたはfalseで結果を返します。
Convert.ToInt32は、文字列だけでなく、double、bool、objectなど、さまざまな型からintへ変換したい場合に使えます。ただし、nullを渡すと0になるという独特の挙動があります。
1-3. JavaScriptやJavaのparseIntとの違い
「C# parseint」で検索する人の多くは、JavaScriptやJavaの経験がある場合があります。
JavaScriptでは、次のようにparseInt()を使えます。
JavaScriptparseInt("123", 10); // 123
parseInt("1.9", 10); // 1
parseInt("abc", 10); // NaN
JavaScriptのparseInt()は、文字列を指定した基数で解釈して整数を返します。また、"1.9"のような文字列では小数点以降を切り捨てるような挙動をします。変換できない場合は例外ではなくNaNを返します。
Javaでは、次のようにInteger.parseInt()を使います。
Javaint number = Integer.parseInt("123");
JavaのInteger.parseInt(String)は、文字列を符号付き10進整数として解析します。変換できない文字列の場合はNumberFormatExceptionが発生します。
一方、C#では次のように書きます。
C#int number = int.Parse("123");
C#にはparseInt()という名前の関数はなく、int.Parseまたはint.TryParseを使うのが基本です。
1-4. 「c# parseint」で検索する人が知りたいこと
「c# parseint」で検索する人が知りたいことは、主に次の4つです。
C#でparseIntのような関数が使えるのか。
文字列をintに変換するにはどう書けばよいのか。
int.Parse、int.TryParse、Convert.ToInt32のどれを使えばよいのか。
変換エラーを防ぐにはどうすればよいのか。
結論として、C#でJavaScriptのparseIntに最も近い基本的な書き方はint.Parseです。ただし、実務で安全に使うなら、多くの場合はint.TryParseが第一候補になります。
2. C#で文字列をintに変換する基本
2-1. int.Parseとは
int.Parseは、文字列をint型に変換するメソッドです。
C#int number = int.Parse("123");
Console.WriteLine(number); // 123
文字列が正しい整数であれば、問題なくintに変換できます。
ただし、次のような値を渡すと例外が発生します。
C#int.Parse("abc");
int.Parse("");
int.Parse(null);
int.Parse("999999999999999999999");
int.Parseは、渡された文字列がnullの場合はArgumentNullException、形式が正しくない場合はFormatException、intの範囲を超える場合はOverflowExceptionを発生させます。
2-2. int.TryParseとは
int.TryParseは、文字列をintに変換できるか試すメソッドです。
C#bool success = int.TryParse("123", out int number);
if (success)
{
Console.WriteLine(number); // 123
}
変換に成功するとtrueを返し、out引数に変換後の値が入ります。変換に失敗するとfalseを返します。
C#bool success = int.TryParse("abc", out int number);
Console.WriteLine(success); // False
Console.WriteLine(number); // 0
int.TryParseは、変換に失敗しても例外を投げません。公式ドキュメントでも、TryParseはParseに似ていますが、変換失敗時に例外をスローしないため、無効な文字列に対するFormatExceptionを調べるための例外処理が不要になると説明されています。
2-3. Convert.ToInt32とは
Convert.ToInt32は、指定した値をintに変換するメソッドです。
C#int number = Convert.ToInt32("123");
Console.WriteLine(number); // 123
文字列だけでなく、doubleやboolなども変換できます。
C#Console.WriteLine(Convert.ToInt32(12.7)); // 13
Console.WriteLine(Convert.ToInt32(true)); // 1
Console.WriteLine(Convert.ToInt32(false)); // 0
Convert.ToInt32の特徴は、nullを渡したときに例外ではなく0を返す点です。
C#string text = null;
int number = Convert.ToInt32(text);
Console.WriteLine(number); // 0
Convert.ToInt32(string)は、文字列がnullの場合に0を返すと定義されています。
2-4. まず覚えるべき使い分けの結論
最初に覚えるべき使い分けはシンプルです。
文字列が必ず整数だと分かっているなら、int.Parse。
文字列が整数かどうか分からないなら、int.TryParse。
nullを0として扱いたい、または文字列以外の型も変換したいなら、Convert.ToInt32。
特に、ユーザー入力や外部データを扱う場合はint.TryParseを使うのが安全です。
3. int.Parseの使い方と注意点
3-1. int.Parseの基本構文
int.Parseの基本構文は次のとおりです。
C#int value = int.Parse(stringValue);
例を見てみましょう。
C#string text = "100";
int number = int.Parse(text);
Console.WriteLine(number); // 100
int.Parseは、文字列が正しい整数形式であることを前提に変換します。
3-2. 数値文字列をintに変換するサンプルコード
次のコードでは、文字列"250"をintに変換しています。
C#string priceText = "250";
int price = int.Parse(priceText);
Console.WriteLine(price + 50); // 300
文字列のままだと、数値計算ではなく文字列結合になってしまう場合があります。
C#string priceText = "250";
Console.WriteLine(priceText + 50); // 25050
int.Parseで数値に変換すれば、計算として扱えます。
C#int price = int.Parse(priceText);
Console.WriteLine(price + 50); // 300
3-3. null・空文字・数値以外で発生する例外
int.Parseでは、渡す値によって異なる例外が発生します。
C#string value1 = null;
int.Parse(value1); // ArgumentNullException
C#string value2 = "";
int.Parse(value2); // FormatException
C#string value3 = "abc";
int.Parse(value3); // FormatException
C#string value4 = "999999999999999999999";
int.Parse(value4); // OverflowException
代表的な例外は次の3つです。
ArgumentNullExceptionは、引数がnullのときに発生します。
FormatExceptionは、文字列の形式が整数として正しくないときに発生します。
OverflowExceptionは、値がintの範囲を超えているときに発生します。
C#のintは32ビット符号付き整数であり、扱える範囲には上限と下限があります。その範囲を超える数値文字列は、整数形式としては正しく見えてもintには変換できません。
3-4. int.Parseを使ってよいケース
int.Parseを使ってよいのは、値が必ず正しい整数であると保証できるケースです。
たとえば、次のような場面です。
C#string fixedValue = "10";
int count = int.Parse(fixedValue);
アプリ内部で固定された文字列を変換する場合や、事前にバリデーション済みの値を変換する場合はint.Parseでも問題ありません。
一方で、ユーザーが入力した値、CSVやExcelから読み込んだ値、Web APIから取得した値、クエリ文字列、フォーム値などは、正しい整数とは限りません。そのような場合はint.TryParseを使う方が安全です。
4. int.TryParseの使い方と安全な変換方法
4-1. int.TryParseの基本構文
int.TryParseの基本構文は次のとおりです。
C#bool success = int.TryParse(stringValue, out int result);
変換に成功した場合はtrue、失敗した場合はfalseが返ります。
C#string text = "123";
if (int.TryParse(text, out int number))
{
Console.WriteLine($"変換成功: {number}");
}
else
{
Console.WriteLine("変換失敗");
}
out int numberには、変換に成功した場合の整数値が入ります。
4-2. 変換に成功した場合・失敗した場合の書き方
成功時と失敗時の処理を分ける基本形は次のとおりです。
C#string input = "100";
if (int.TryParse(input, out int number))
{
Console.WriteLine(number * 2);
}
else
{
Console.WriteLine("数値を入力してください。");
}
入力値が"100"なら、変換に成功して200が表示されます。
入力値が"abc"なら、変換に失敗してエラーメッセージを表示できます。
C#string input = "abc";
if (int.TryParse(input, out int number))
{
Console.WriteLine(number * 2);
}
else
{
Console.WriteLine("数値を入力してください。");
}
このように、TryParseを使えば、例外で処理を止めずに自然な分岐を書けます。
4-3. 例外を出さずに安全に数値変換する方法
ユーザー入力を安全に変換するなら、基本的には次の形を使います。
C#Console.Write("年齢を入力してください: ");
string input = Console.ReadLine();
if (int.TryParse(input, out int age))
{
Console.WriteLine($"年齢は{age}歳です。");
}
else
{
Console.WriteLine("年齢は整数で入力してください。");
}
このコードなら、ユーザーが"20"と入力すれば成功します。
一方、"abc"、""、"20.5"のような値を入力しても、アプリが例外で落ちることはありません。
4-4. ユーザー入力やフォーム値の変換にTryParseが向いている理由
ユーザー入力やフォーム値では、次のような値が入る可能性があります。
"123"
""
"abc"
"12.5"
"1,000"
null
" 123 "
int.Parseでこれらをそのまま処理すると、値によって例外が発生します。
一方、int.TryParseなら、変換できるかどうかを判定できます。
C#string input = "abc";
if (!int.TryParse(input, out int number))
{
Console.WriteLine("整数ではありません。");
return;
}
Console.WriteLine(number);
int.TryParseは、入力チェックと変換を同時に行えるため、Webフォーム、API、バッチ処理、CSV読み込みなどで非常によく使われます。
5. Convert.ToInt32の使い方と特徴
5-1. Convert.ToInt32の基本構文
Convert.ToInt32の基本構文は次のとおりです。
C#int value = Convert.ToInt32(value);
文字列を変換する例です。
C#string text = "123";
int number = Convert.ToInt32(text);
Console.WriteLine(number); // 123
数値型から変換することもできます。
C#double rate = 12.7;
int number = Convert.ToInt32(rate);
Console.WriteLine(number); // 13
5-2. nullを変換したときの挙動
Convert.ToInt32の大きな特徴は、nullを渡すと0を返すことです。
C#string text = null;
int number = Convert.ToInt32(text);
Console.WriteLine(number); // 0
これはint.Parseとは異なります。
C#string text = null;
int number = int.Parse(text); // ArgumentNullException
nullを0として扱いたい場合には便利ですが、注意も必要です。
本来は「未入力」や「値なし」として扱うべきnullが、意図せず0になってしまう可能性があるからです。
たとえば、年齢や数量でnullと0を区別したい場合、Convert.ToInt32を使うと区別できなくなります。その場合はint?やTryParseを使う方が適しています。
5-3. 小数やboolを変換したときの挙動
Convert.ToInt32は、小数やboolも変換できます。
C#Console.WriteLine(Convert.ToInt32(12.3)); // 12
Console.WriteLine(Convert.ToInt32(12.7)); // 13
Console.WriteLine(Convert.ToInt32(true)); // 1
Console.WriteLine(Convert.ToInt32(false)); // 0
boolの場合、trueは1、falseは0になります。
小数の場合は、単純な切り捨てではなく、最も近い整数へ丸められます。さらに、ちょうど中間の値では偶数側に丸められます。たとえば、4.5は4、5.5は6になります。
C#Console.WriteLine(Convert.ToInt32(4.5)); // 4
Console.WriteLine(Convert.ToInt32(5.5)); // 6
この挙動は、JavaScriptのparseInt("1.9")が1になるのとは異なります。C#で小数を切り捨てたい場合は、Convert.ToInt32ではなく、Math.Truncateやキャストを検討します。
C#double value = 12.9;
int truncated = (int)value;
Console.WriteLine(truncated); // 12
5-4. Convert.ToInt32を使うべきケース
Convert.ToInt32が向いているのは、次のようなケースです。
nullを0として扱ってよい場合。
object型の値をintに変換したい場合。
boolやdoubleなど、文字列以外の型から変換したい場合。
たとえば、データベースやDataTableから取得した値がobjectとして返ってくる場合に使われることがあります。
C#object value = "123";
int number = Convert.ToInt32(value);
Console.WriteLine(number); // 123
ただし、入力値が不正な文字列の場合はFormatExceptionが発生します。
C#Convert.ToInt32("abc"); // FormatException
安全に変換したい場合は、Convert.ToInt32よりもint.TryParseを優先しましょう。
6. int.Parse・TryParse・Convert.ToInt32の違いを比較
6-1. 変換失敗時の挙動の違い
int.Parseは、変換に失敗すると例外を発生させます。
C#int.Parse("abc"); // FormatException
int.TryParseは、変換に失敗しても例外を発生させず、falseを返します。
C#bool success = int.TryParse("abc", out int number);
Console.WriteLine(success); // False
Console.WriteLine(number); // 0
Convert.ToInt32は、不正な文字列では例外を発生させます。
C#Convert.ToInt32("abc"); // FormatException
つまり、失敗する可能性がある値を扱うなら、int.TryParseが最も安全です。
6-2. nullを渡したときの違い
nullを渡したときの挙動は大きく異なります。
C#string text = null;
int.Parse(text); // ArgumentNullException
int.TryParse(text, out int n); // false
Convert.ToInt32(text); // 0
int.Parseは例外を発生させます。
int.TryParseはfalseを返します。
Convert.ToInt32は0を返します。
この違いは実務で重要です。nullを「値なし」として扱いたいのか、「0」として扱いたいのかによって、使うメソッドを選ぶ必要があります。
6-3. 例外処理が必要かどうかの違い
int.ParseやConvert.ToInt32は、変換に失敗する可能性がある場合、必要に応じてtry-catchで例外処理を書く必要があります。
C#try
{
int number = int.Parse("abc");
}
catch (FormatException)
{
Console.WriteLine("数値形式ではありません。");
}
一方、int.TryParseなら、通常のif文で処理できます。
C#if (int.TryParse("abc", out int number))
{
Console.WriteLine(number);
}
else
{
Console.WriteLine("数値形式ではありません。");
}
ユーザー入力のように失敗が通常起こり得る処理では、例外処理よりもTryParseの方が読みやすく、意図も明確です。
6-4. 実務でのおすすめ使い分け
実務では、次の使い分けがおすすめです。
内部的に固定された正しい数値文字列ならint.Parse。
ユーザー入力、フォーム値、CSV、APIレスポンスならint.TryParse。
nullを0として扱ってよい場合や、さまざまな型から変換したい場合はConvert.ToInt32。
迷った場合は、まずint.TryParseを選ぶと安全です。
6-5. 比較表で見る3つの変換方法
| 方法 | 成功時 | 失敗時 | nullの場合 | 向いているケース |
|---|---|---|---|---|
int.Parse | intを返す | 例外 | 例外 | 必ず整数と分かっている文字列 |
int.TryParse | trueと変換値 | false | false | ユーザー入力・外部データ |
Convert.ToInt32 | intを返す | 例外 | 0 | nullを0扱いしたい場合、型変換 |
この表だけを見ると、最も安全なのはint.TryParseです。ただし、常にTryParseだけを使うべきというわけではありません。値の性質に応じて使い分けることが大切です。
7. C#の数値変換でよくあるエラーと対処法
7-1. FormatExceptionの原因と対処法
FormatExceptionは、文字列の形式が整数として正しくない場合に発生します。
C#int.Parse("abc"); // FormatException
int.Parse("12.5"); // FormatException
int.Parse(""); // FormatException
対処法は、int.TryParseを使うことです。
C#string input = "abc";
if (!int.TryParse(input, out int number))
{
Console.WriteLine("整数を入力してください。");
}
また、入力前後の空白が原因であれば、Trim()で取り除くこともできます。
C#string input = " 123 ";
int number = int.Parse(input.Trim());
ただし、int.Parseやint.TryParseは前後の空白を許容できます。問題になりやすいのは、カンマ、小数点、全角文字、単位付き文字列などです。
7-2. ArgumentNullExceptionの原因と対処法
ArgumentNullExceptionは、int.Parseにnullを渡したときに発生します。
C#string input = null;
int number = int.Parse(input); // ArgumentNullException
対処法としては、事前にnullチェックを行います。
C#string input = null;
if (input != null)
{
int number = int.Parse(input);
}
または、TryParseを使います。
C#string input = null;
if (int.TryParse(input, out int number))
{
Console.WriteLine(number);
}
else
{
Console.WriteLine("数値に変換できません。");
}
TryParseなら、nullでも例外にならずfalseになります。
7-3. OverflowExceptionの原因と対処法
OverflowExceptionは、数値がintの範囲を超えた場合に発生します。
C#int.Parse("999999999999999999999"); // OverflowException
intで扱える範囲を超える可能性がある場合は、longを使います。
C#string input = "9999999999";
if (long.TryParse(input, out long number))
{
Console.WriteLine(number);
}
ただし、最終的にintに収めたい場合は、範囲チェックを行います。
C#string input = "9999999999";
if (long.TryParse(input, out long value) &&
value >= int.MinValue &&
value <= int.MaxValue)
{
int number = (int)value;
Console.WriteLine(number);
}
else
{
Console.WriteLine("intの範囲外です。");
}
7-4. 全角数字・空白・カンマ区切りで失敗する場合
数値に見えても、次のような文字列は変換に失敗することがあります。
C#int.Parse("120"); // 全角数字
int.Parse("1,000"); // カンマ区切り
int.Parse("120円"); // 単位付き
カンマ区切りを許可したい場合は、NumberStyles.AllowThousandsを使います。
C#using System.Globalization;
string input = "1,000";
if (int.TryParse(input, NumberStyles.AllowThousands, CultureInfo.InvariantCulture, out int number))
{
Console.WriteLine(number); // 1000
}
全角数字を扱いたい場合は、入力値を半角に正規化してから変換する方法があります。
C#string input = "123";
string normalized = 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(normalized, out int number))
{
Console.WriteLine(number); // 123
}
実務では、入力値の仕様を決めておくことが重要です。たとえば「カンマは許可する」「単位は入力させない」「全角数字は半角へ変換する」など、ルールを明確にすると変換エラーを減らせます。
7-5. 小数文字列をintに変換したい場合
"12.5"のような小数文字列は、int.Parseや通常のint.TryParseでは変換できません。
C#int.Parse("12.5"); // FormatException
小数文字列を整数にしたい場合は、まずdoubleやdecimalとして変換し、その後で丸めや切り捨てを行います。
C#string input = "12.5";
if (decimal.TryParse(input, out decimal decimalValue))
{
int number = (int)Math.Truncate(decimalValue);
Console.WriteLine(number); // 12
}
四捨五入したい場合は、Math.Roundを使います。
C#string input = "12.5";
if (decimal.TryParse(input, out decimal decimalValue))
{
int number = (int)Math.Round(decimalValue);
Console.WriteLine(number);
}
重要なのは、「小数を切り捨てたいのか」「四捨五入したいのか」「小数は入力エラーにしたいのか」を先に決めることです。
8. 実務で使える安全な数値変換パターン
8-1. ユーザー入力をintに変換するコード例
ユーザー入力を扱う場合は、int.TryParseを使います。
C#Console.Write("数量を入力してください: ");
string input = Console.ReadLine();
if (int.TryParse(input, out int quantity))
{
Console.WriteLine($"数量: {quantity}");
}
else
{
Console.WriteLine("数量は整数で入力してください。");
}
この書き方なら、入力値が不正でもアプリが落ちません。
8-2. nullや空文字を許容するコード例
nullや空文字を許容し、未入力として扱いたい場合は、先にチェックします。
C#string input = "";
if (string.IsNullOrWhiteSpace(input))
{
Console.WriteLine("未入力です。");
}
else if (int.TryParse(input, out int number))
{
Console.WriteLine(number);
}
else
{
Console.WriteLine("整数ではありません。");
}
string.IsNullOrWhiteSpaceを使うと、null、空文字、空白だけの文字列をまとめて判定できます。
8-3. デフォルト値を設定して変換するコード例
変換に失敗した場合にデフォルト値を使いたい場合は、次のように書けます。
C#string input = "abc";
int number = int.TryParse(input, out int parsed)
? parsed
: 0;
Console.WriteLine(number); // 0
デフォルト値を1にしたい場合は、次のようにします。
C#string input = "abc";
int number = int.TryParse(input, out int parsed)
? parsed
: 1;
Console.WriteLine(number); // 1
ページ番号、表示件数、リトライ回数などでは、このようなデフォルト値付きの変換がよく使われます。
8-4. nullable intに変換するコード例
nullや空文字の場合はnull、数値ならintとして扱いたい場合は、int?を使います。
C#string input = "";
int? number = int.TryParse(input, out int parsed)
? parsed
: null;
Console.WriteLine(number.HasValue ? number.Value : "null");
ただし、このコードは"abc"のような不正な文字列もnullになります。
未入力と不正入力を区別したい場合は、次のように書きます。
C#string input = "abc";
int? number = null;
if (string.IsNullOrWhiteSpace(input))
{
number = null;
}
else if (int.TryParse(input, out int parsed))
{
number = parsed;
}
else
{
Console.WriteLine("整数として正しくありません。");
}
8-5. 共通メソッド化して再利用する方法
数値変換を何度も書く場合は、共通メソッド化すると便利です。
C#static int ToIntOrDefault(string input, int defaultValue = 0)
{
return int.TryParse(input, out int value) ? value : defaultValue;
}
使い方は次のとおりです。
C#int page = ToIntOrDefault("3", 1);
int size = ToIntOrDefault("abc", 20);
Console.WriteLine(page); // 3
Console.WriteLine(size); // 20
nullable intに変換する共通メソッドも作れます。
C#static int? ToNullableInt(string input)
{
if (string.IsNullOrWhiteSpace(input))
{
return null;
}
return int.TryParse(input, out int value) ? value : null;
}
使い方です。
C#int? age = ToNullableInt("25");
int? empty = ToNullableInt("");
Console.WriteLine(age); // 25
Console.WriteLine(empty); // null
入力値の扱いをプロジェクト内で統一したい場合、共通メソッド化は有効です。
9. C#のParseIntに関するよくある質問
9-1. C#でparseIntと書くとエラーになるのはなぜ?
C#にはparseInt()というグローバル関数がないためです。
JavaScriptでは次のように書けます。
JavaScriptparseInt("123", 10);
しかし、C#では次のように型のメソッドとして呼び出します。
C#int.Parse("123");
安全に変換したい場合は、次のようにします。
C#int.TryParse("123", out int number);
C#では、int.Parse、int.TryParse、Convert.ToInt32を使うと覚えておきましょう。
9-2. 文字列が数値かどうか判定するには?
文字列が整数かどうか判定するには、int.TryParseを使います。
C#string input = "123";
if (int.TryParse(input, out int number))
{
Console.WriteLine("整数です。");
}
else
{
Console.WriteLine("整数ではありません。");
}
判定だけしたい場合でも、TryParseを使うのが一般的です。
C#bool isNumber = int.TryParse(input, out _);
out _を使うと、変換後の値を使わずに成功・失敗だけを判定できます。
9-3. int以外のlong・double・decimalにもParseは使える?
使えます。
C#long longValue = long.Parse("12345678900");
double doubleValue = double.Parse("12.34");
decimal decimalValue = decimal.Parse("12.34");
TryParseもあります。
C#long.TryParse("12345678900", out long longValue);
double.TryParse("12.34", out double doubleValue);
decimal.TryParse("12.34", out decimal decimalValue);
金額のように誤差を避けたい数値にはdecimalがよく使われます。
C#string priceText = "1234.56";
if (decimal.TryParse(priceText, out decimal price))
{
Console.WriteLine(price);
}
大きな整数を扱う場合はlong、小数を扱う場合はdoubleやdecimalを検討しましょう。
9-4. TryParseとtry-catchはどちらを使うべき?
入力値が不正になることが普通にあり得るなら、TryParseを使うべきです。
C#if (int.TryParse(input, out int number))
{
Console.WriteLine(number);
}
else
{
Console.WriteLine("整数ではありません。");
}
一方、try-catchは、通常は起きない例外的な状況を処理するために使います。
C#try
{
int number = int.Parse(input);
}
catch (FormatException)
{
Console.WriteLine("形式が正しくありません。");
}
ユーザー入力の失敗は「例外的な異常」ではなく、通常の入力パターンとして起こり得ます。そのため、フォームやAPIの入力チェックではTryParseの方が自然です。
9-5. 文字列から数値への変換で最も安全な方法は?
最も安全な基本形は、int.TryParseです。
C#if (int.TryParse(input, out int number))
{
// 変換成功
}
else
{
// 変換失敗
}
TryParseなら、null、空文字、数値以外、範囲外の値でも例外でアプリが落ちにくくなります。
ただし、カンマ区切りやカルチャ依存の形式を扱う場合は、NumberStylesやCultureInfoを指定する必要があります。
C#using System.Globalization;
string input = "1,000";
if (int.TryParse(input, NumberStyles.AllowThousands, CultureInfo.InvariantCulture, out int number))
{
Console.WriteLine(number);
}
安全性を高めるには、単にTryParseを使うだけでなく、どの形式を許可するかを明確にすることが大切です。
まとめ
C#には、JavaScriptのようなparseInt()関数は存在しません。C#で文字列をintに変換する場合は、int.Parse、int.TryParse、Convert.ToInt32を使います。
int.Parseは、文字列が必ず整数であると分かっている場合に向いています。ただし、null、空文字、数値以外、範囲外の値では例外が発生します。
int.TryParseは、変換に成功したかどうかをtrueまたはfalseで返します。例外を出さずに安全に変換できるため、ユーザー入力、フォーム値、CSV、APIレスポンスなど、外部から来る値に向いています。
Convert.ToInt32は、文字列だけでなく、doubleやboolなどさまざまな型をintに変換できます。ただし、nullを0に変換するため、nullと0を区別したい場合には注意が必要です。
使い分けの結論は次のとおりです。
| やりたいこと | おすすめ |
|---|---|
| 確実に整数の文字列を変換したい | int.Parse |
| 変換できるか分からない値を安全に扱いたい | int.TryParse |
| nullを0として扱いたい、または複数の型から変換したい | Convert.ToInt32 |
実務で迷った場合は、まずint.TryParseを選ぶのがおすすめです。C#で「ParseIntのような処理」をしたいときは、単にint.Parseに置き換えるだけでなく、入力値の安全性まで考えて適切な変換方法を選びましょう。

