int.Parse() / int.TryParse()
| 対応: | C# 1.0(2002) |
|---|
文字列を整数に変換する『int.Parse()』と、変換失敗時に例外を投げない安全な変換メソッド『int.TryParse()』です。
構文
// 文字列を int に変換します。変換できない場合は FormatException をスローします。 int.Parse(string s) // 変換を試みます。成功した場合は true と変換後の値を返します。失敗しても例外は発生しません。 int.TryParse(string s, out int result) // double / long などの他の数値型にも同様のメソッドがあります。 double.Parse(string s) double.TryParse(string s, out double result)
メソッド一覧
| メソッド | 概要 |
|---|---|
| int.Parse(string s) | 文字列を int に変換します。変換できない文字列が渡されると FormatException がスローされます。 |
| int.TryParse(string s, out int result) | 変換を試みます。成功時は true を返し result に値が入ります。失敗時は false を返し result は 0 になります。 |
| double.Parse(string s) | 文字列を double に変換します。 |
| double.TryParse(string s, out double result) | 文字列を double に変換を試みます。 |
サンプルコード
Program.cs
using System;
// int.Parse() で文字列を整数に変換する
string numStr = "42";
int num = int.Parse(numStr);
Console.WriteLine(num + 10); // 52
// int.TryParse() で安全に変換する
string input1 = "100";
string input2 = "abc"; // 数値に変換できない文字列
if (int.TryParse(input1, out int result1)) {
Console.WriteLine("変換成功: " + result1); // 変換成功: 100
}
if (!int.TryParse(input2, out int result2)) {
Console.WriteLine("変換失敗: " + result2); // 変換失敗: 0(result は 0 になる)
}
dotnet run 52 変換成功: 100 変換失敗: 0
ユーザー入力の変換パターン
ユーザー入力を整数として使いたい場合は TryParse() を使うのが一般的なパターンです。double や long など他の数値型にも同様のメソッドがあります。
UserInput.cs
using System;
// ユーザー入力を整数に変換する典型的なパターン
Console.Write("スコアを入力してください: ");
string userInput = Console.ReadLine() ?? "";
if (int.TryParse(userInput, out int score)) {
Console.WriteLine($"スコアは {score} 点です。");
} else {
Console.WriteLine("正しい数値を入力してください。");
}
// double.Parse() の例
double ratio = double.Parse("0.75");
Console.WriteLine($"達成率: {ratio:P0}"); // 達成率: 75%
// long 型の変換
if (long.TryParse("9999999999", out long bigNum)) {
Console.WriteLine(bigNum); // 9999999999
}
dotnet run スコアを入力してください: 88 スコアは 88 点です。 達成率: 75% 9999999999
よくあるミス
よくあるミス: int.Parse() に変換不可能な文字列を渡す
『int.Parse()』に数値に変換できない文字列を渡すと FormatException がスローされます。ユーザー入力には必ず TryParse() を使ってください。
using System;
// NG: 変換できない文字列を渡すと例外が発生する
int value = int.Parse("abc"); // FormatException
dotnet run Unhandled exception. System.FormatException: Input string was not in a correct format.
修正後は次の通りです。
using System;
// OK: TryParse() で例外なしに安全に変換する
if (int.TryParse("abc", out int value)) {
Console.WriteLine(value);
} else {
Console.WriteLine("変換できませんでした。");
}
dotnet run 変換できませんでした。
概要
ユーザーからの入力や外部データを変換する場合は、『int.Parse()』ではなく『int.TryParse()』の方が安全です。入力値が数値でない場合に『int.Parse()』は例外をスローしてプログラムが停止しますが、『int.TryParse()』は安全に失敗を検知できます。
『Convert.ToInt32()』も文字列を整数に変換できますが、null を渡すと 0 を返す点が異なります。詳細は『Convert.ToString() / Convert.ToInt32()』を参照してください。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。