zukucode
主にWEB関連の情報を技術メモとして発信しています。

C# TryParseで文字列を安全に数値へ変換する

テキストボックスやCSVから受け取った値は文字列です。数値として使いたい場合、int.Parseは変換できない入力で例外を投げます。入力が誤っていることを通常の分岐として扱うなら、TryParseが向いています。

成功したときだけ数値を使う

string input = "12";

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

"12"は成功、"12.5""abc"は失敗します。非常に大きな数でintの範囲を超えた場合も失敗です。

変換成功と有効な値は違う

if (!int.TryParse(input, out int quantity) || quantity < 1 || quantity > 100)
{
    Console.WriteLine("数量は1〜100の整数で入力してください。");
    return;
}

Console.WriteLine($"注文数量: {quantity}");

-3は整数として変換できますが、注文数量としては不正です。構文の確認と業務上の範囲確認を分けます。上のreturnはメソッド内で使う例です。

桁区切りや地域差に注意する

標準のint.TryParseは実行環境のカルチャと既定の数値書式に従います。外部システムと共有するファイルなど、書式を固定したい場合はカルチャとNumberStylesを明示します。

using System.Globalization;

bool ok = int.TryParse(
    input,
    NumberStyles.Integer,
    CultureInfo.InvariantCulture,
    out int value);

変換に失敗するとvalueには既定値の0が入ります。戻り値のboolを確認せず、0として処理を続けないでください。


関連記事