はなちるのマイノート

Unityをメインとした技術ブログ。自分らしくまったりやっていきたいと思いますー!

【Unity,C#】型変換のときに例外でも止めずに実行を続ける(TryParse)

はじめに

今回は型変換の際の例外についての記事になります!

突然ですが、このコードを見てみてください。

private void Start()
{
    string str = "1234五";
    int num = int.Parse(str);

    Debug.Log($"num: {num}");
}

このコードでコンソールの出力がされることはありません。

なぜならint.Parseメソッドで例外が発生して処理が止まってしまっているからです。

FormatException: Input string was not in a correct format.

ただ文字列をユーザーに入力してもらうといった際には例外があっても処理は止めたくないですよね。

これについて考えていきたいと思います。

try,catchを使う方法

真っ先に考えられる方法これでしょう。

private void Start()
{
    string str = "1234五";
    int num = 0;
    try
    {
        num = int.Parse(str);
    }
    catch (Exception) { };
    Debug.Log($"num: {num}");
}

ただこれはあまりスマートな方法とは言えません。

なぜなら例外自体が比較的重たい処理なので、不必要に発生させるのは良くないからです。

TryParseを使う

ではどうすれば良いかというと、TryParseメソッドを使うことです。

これ使うと、変換に失敗しても例外を発生させずに、成功すれば戻り値としてtrue,失敗した場合にはfalseを返します

private void Start()
{
    string str = "1234五";
    int num = 0;
    int.TryParse(str, out num);
    Debug.Log($"num: {num}");
}

先程も書きましたが、例外が発生しないので処理時間が早いし、可読性も高いと思います。

またこの例だと返り値は必要ありませんが、変換に成功できたかを知る事ができます。

bool result = int.TryParse(str, out num);    // false(失敗)

さいごに

これは知ってるか知らないかの違いなので、是非覚えておくと良いと思います!