C#

C# | TryParse:文字列から別のデータ型への変換

2024年4月23日

本ページはプロモーションが含まれています

C#tryparseアイキャッチ画像

TryParseメソッドは、C#で文字列を特定のデータ型に変換しようとする際に使用される便利なメソッドです。

例外をスローすることなく、変換が成功したかどうかを示すブール値を返します。

string input = "123";
if (int.TryParse(input, out int result))
{
    Console.WriteLine($"変換成功: {result}");
}
else
{
    Console.WriteLine("変換失敗");
}

TryParseを使用していて考えられる主な疑問や問題点を挙げてみます。

  • どのようなデータ型に対応しているのか?TryParseメソッドがどのデータ型(整数、浮動小数点数、日付など)に対応しているのかについて知りたい。
  • エラーハンドリングの最適な方法は?TryParseメソッドで変換に失敗した場合のエラーハンドリングの方法や、代替手段について知りたい。
  • ParseとTryParseの違い:具体的な違いは何があるのか。

この記事ではこれらについて詳しく解説します。

TryParseメソッドとは?

ポイント

TryParseメソッドを使用した安全な変換は、Parseメソッドと同様に文字列から別のデータ型への変換を行いますが、異なる点はエラーハンドリングの方法です。

Parseメソッドは変換に失敗した場合に例外をスローしますが、TryParseメソッドはbool型のように成功の時はtrue、失敗の時はfalseを返します。

これにより、プログラムの実行が中断されずにエラーを処理できます。

TryParseの種類

  1. int.TryParse文字列を整数型 (int) に変換します。
  2. double.TryParse: 文字列を倍精度浮動小数点型 (double) に変換します。
  3. float.TryParse: 文字列を単精度浮動小数点型 (float) に変換します。
  4. decimal.TryParse: 文字列を10進数型 (decimal) に変換します。
  5. DateTime.TryParse: 文字列を日付型 (DateTime) に変換します。
  6. bool.TryParse: 文字列を真偽値型 (bool) に変換します。

TryParseの簡単な例

using System;

public class Program
{
    public static void Main()
    {
        string numberString = "123";
        int number;

        if (int.TryParse(numberString, out number))
        {
            Console.WriteLine("変換に成功しました。: " + number);
        }
        else
        {
            Console.WriteLine("変換に失敗しました。");
        }
    }
}

コードの解説

  • if (int.TryParse(numberString, out number))
    TryParse メソッドを使用して文字列を整数に変換し、変換の成否を判断します。
    • int.TryParse メソッドは、numberString を整数に変換し、変換が成功した場合は true を返し、number パラメータに変換後の値を格納します。
    • 変換に失敗した場合は false を返し、number パラメータには整数型の既定値(0)が格納されます。

TryParse メソッドは変換が成功したらどうなるの?

ねこ
ねこ
たく
たく

成功すると、true を返して、変換した値を out パラメータで指定した変数に入れてくれるよ。

失敗した場合は?

ねこ
ねこ
たく
たく

失敗すると、false を返して、指定した変数にはその型のデフォルト値が入るんだ。

TryParseの使用上の注意点

  1. 戻り値の確認
    変換が成功した場合は true が返され、out パラメータに変換された値が格納されます。変換が失敗した場合は false が返され、out パラメータには各データ型のデフォルト値が設定されます。(int , longなら0)
  2. null 文字列の処理
    TryParse メソッドは、文字列が null の場合にも正しく処理されます。具体的には、null が渡された場合、TryParse メソッドは常に false を返します。out パラメーターには型の既定値が格納されます。

エラーハンドリングの方法

TryParseメソッドで変換に失敗した場合のエラーハンドリングの方法や、代替手段について紹介します。

TryParseメソッドで変換に失敗した場合のエラーハンドリングの方法

以下3点の方法について解説します。

  • 方法1:条件分岐による処理
  • 方法2:デフォルト値の設定
  • 方法3:エラーメッセージの提供

方法1:条件分岐による処理TryParseメソッドの戻り値を利用して、変換が成功したかどうかを確認し、それに応じた処理を行います。

string inputString = "123"; // 変換したい文字列
        int result;

        if (int.TryParse(inputString, out result))
        {
            // 成功した場合の処理
            Console.WriteLine($"変換成功しました。結果は {result} です。");
        }
        else
        {
            // 失敗した場合の処理
            Console.WriteLine("入力値は整数として解釈できませんでした。");
        }

方法2:デフォルト値の設定: 変換に失敗した場合にはデフォルトの値を設定する方法です。これにより、後続の処理で安全に値を使用することができます。

string inputString = "abc"; // 変換したい文字列(ここでは意図的に無効な文字列を使用)
        int defaultValue = 0; // デフォルト値
        int result;

        if (!int.TryParse(inputString, out result))
        {
            result = defaultValue; // デフォルト値の設定
            Console.WriteLine("入力値は整数として解釈できませんでした。デフォルト値を使用します。");
        }
        
        Console.WriteLine($"最終的な結果は {result} です。");

方法3:エラーメッセージの提供: 失敗した理由やユーザーに通知するための適切なエラーメッセージを表示する方法です。

string inputString = "abc"; // 変換したい文字列(ここでは意図的に無効な文字列を使用)
        int result;

        if (!int.TryParse(inputString, out result))
        {
            Console.WriteLine($"入力値 '{inputString}' は整数として解釈できませんでした。正しい形式で入力してください。");
        }

代替手段

TryParseメソッドの代わりにtry-catch文の例外処理を行う方法です。

string inputString = "abc"; // 変換したい文字列(ここでは意図的に無効な文字列を使用)

        try
        {
            int result = int.Parse(inputString); // 変換に失敗すると例外がスローされる
            Console.WriteLine($"変換成功しました。結果は {result} です。");
        }
        catch (FormatException ex)
        {
            Console.WriteLine($"入力値 '{inputString}' は整数として解釈できませんでした。正しい形式で入力してください。");
            // 例外がスローされた場合の追加の処理
            // 例えば、ログにエラーを記録するなどの処理が可能です。
            Console.WriteLine("エラー詳細: " + ex.Message);
        }

ParseとTryParseの違い

ParseTryParse の違いは次の通りです。

Parse

  • 動作: 文字列を指定された型に変換します(例: int.Parse("123"))。
  • 失敗時の挙動: 変換に失敗すると例外(FormatExceptionOverflowException)をスローします。
  • 用途: 変換が確実に成功すると予想される場合や、失敗時に例外処理が必要な場合に使用します。

TryParse

  • 動作: 文字列を指定された型に変換し、成功したかどうかをブール値で返します(例: int.TryParse("123", out int result))。
  • 失敗時の挙動: 変換に失敗しても例外はスローせず、false が返され、out パラメータにはデフォルト値が設定されます。
  • 用途: 変換が失敗する可能性がある場合や、例外を使用せずにエラーチェックを行いたい場合に使用します。

要するに、Parse は変換に失敗した場合に例外をスローし、TryParse は失敗しても例外をスローせず、変換結果とtrue・falseの状態を返します。

まとめ

  • TryParse メソッドは、指定された文字列を特定の型に変換し、変換が成功したかどうかを示すブール値を返します。
  • 変換が成功した場合、変換された値が out パラメータに格納されます。
  • 変換が失敗した場合、TryParse メソッドは false を返し、out パラメータには指定された型のデフォルト値が設定されます。
  • TryParse メソッドは、例外をスローせずに安全に変換を試みるため、パフォーマンスの向上に寄与します。
  • 多くの基本的なデータ型に対して、TryParse メソッドが提供されており、整数、浮動小数点数、日付などの変換に使用されます。
  • TryParse メソッドを使用する際は、戻り値を確認し、変換が成功したかどうかを適切に処理する必要があります。

Follow me!

-C#
-,

PAGE TOP