C#
 Computer >> コンピューター >  >> プログラミング >> C#

C#で文字列が数値かどうかを判定する方法 ― int.TryParseとint.Parseの違い

C#で文字列が有効な数値であるかどうかを検証するには、int.TryParseメソッドまたはint.Parseメソッドを使用します。どちらも文字列を整数に変換できますが、変換に失敗したときの挙動が大きく異なります。

  • int.Parse:文字列を整数に変換できない場合、例外(FormatException)をスローします。
  • int.TryParse:変換の成否をbool値で返します。成功ならtrue、失敗ならfalseとなるため、例外処理を書かずに済み、安全に検証できます。また、outパラメータで変換後の数値を受け取ることができます。

サンプルコード1:有効な数値文字列の場合

using System;
namespace DemoApplication {
    class Program {
        static void Main(string[] args) {
            string numberString = "123";
            int number = 0;
            if(int.TryParse(numberString, out number)) {
                Console.WriteLine($"TryParseで変換した数値: {number}");
            }
            Console.WriteLine($"Parseで変換した数値: {int.Parse(numberString)}");
            Console.ReadLine();
        }
    }
}

実行結果

TryParseで変換した数値: 123
Parseで変換した数値: 123

上記の例では、文字列「123」は有効な整数であるため、int.TryParseはtrueを返し、outパラメータには変換後の数値「123」が格納されます。その結果、if文の条件がtrueとなり、ifブロック内の処理が実行されます。同様に、int.Parseも正しい整数値を返します。

サンプルコード2:無効な文字列の場合

using System;
namespace DemoApplication {
    class Program {
        static void Main(string[] args) {
            string numberString = "A123";
            int number = 0;
            if(int.TryParse(numberString, out number)) {
                Console.WriteLine($"TryParseで変換した数値: {number}");
            }
            else {
                Console.WriteLine("文字列は有効な数値ではありません");
            }
            Console.ReadLine();
        }
    }
}

実行結果

文字列は有効な数値ではありません

文字列「A123」には英字が含まれており、有効な数値ではないため、int.TryParseはfalseを返し、elseブロックの処理が実行されます。このように、TryParseを使えば例外を発生させることなく、安全に数値の妥当性をチェックできます。

サンプルコード3:int.Parseで例外が発生するケース

同じ無効な文字列に対してint.Parseを使用すると、例外がスローされます。

using System;
namespace DemoApplication {
    class Program {
        static void Main(string[] args) {
            string numberString = "A123";
            Console.WriteLine($"Parseで変換した数値: {int.Parse(numberString)}");
            // 例外:System.FormatException
            // 「入力文字列の形式が正しくありません」
        }
    }
}

int.TryParseとint.Parseの使い分けのポイント

  • int.TryParse:ユーザー入力や外部ファイルなど、内容が保証されていない文字列を扱う場合に最適です。例外処理のオーバーヘッドがないため、パフォーマンス面でも有利です。
  • int.Parse:文字列が必ず有効な数値であることが事前に分かっている場合に適しています。コードが簡潔になりますが、無効な入力には例外対応が必要です。

なお、C# 7.0以降ではout変数を宣言と同時に記述できるため、次のように書くことも可能です。

if(int.TryParse(numberString, out var result)) {
    Console.WriteLine($"変換成功: {result}");
}

また、doubleやdecimalなどの他の数値型についても、それぞれdouble.TryParsedecimal.TryParseが用意されているため、同じ手法で検証できます。

  1. JavaScriptで小数を検証するには?正規表現を使った実装例を解説

    JavaScriptで小数を検証する方法 JavaScriptで、ユーザーが入力した値が正しい小数(小数点を含む数値)かどうかを判定したい場面はよくあります。そんなときに便利なのが正規表現です。本記事では、match()メソッドと正規表現を組み合わせて、入力値が小数かどうかを検証する方法を、具体的なコード例とともにわかりやすく解説します。 使用する正規表現パターン 今回の検証では、以下の正規表現を使用します。 /^[-+]?[0-9]+\.[0-9]+$/ このパターンの各要素の意味は次のとおりです。 ^[-+]?:文字列の先頭に符号(+ または -)が付いていても、付いていなくてもマッチ

  2. AndroidのSQLiteで文字列型の数値を正しく並べ替える方法【CAST関数活用】

    Androidアプリ開発では、SQLiteが標準で組み込まれたデータベースとして広く使われています。SQLiteはオープンソースのSQLデータベースで、データを端末内のテキストファイルに保存します。リレーショナルデータベースの主要な機能をすべて備えており、JDBCやODBCのような接続設定を行うことなく、すぐにデータベースへアクセスできるのが大きな特徴です。 文字列型の数値カラムをソートする際の課題 SQLiteでは、給与などの数値をTEXT型(文字列)カラムに保存していると、単純なORDER BY句では「辞書順」でソートされてしまいます。そのため「10」が「9」より先に表示されるなど、期待