[C#] int.TryParse を扱いやすくする

数字文字列から数字を抜き出すには、int.TryParse を使うのが基本です。
文字列が数字でない場合は戻り値が false であるのを確認し、適切な処理を実行します。
(今回の例だと、number を 0 に初期化しています)

if (int.TryParse("0123", out int number) == false)
{
  number = 0;
}

false になるのは、第1引数が空欄や null だった場合など。
ただ、毎回それを確認し、自分で 0 クリアするのは面倒なので、その辺を楽にするクラスを作っておきましょう。

コード

using System;

public class EasyParse
{
    /// <summary>
    /// Intに変換します。エラーだと0を返します。
    /// </summary>
    /// <param name="src">元の値</param>
    /// <returns>変換値</returns>
    public static int Int(object src)
    {
        return Int(src, 0);
    }
        
    /// <summary>
    /// Intに変換します。エラーだとerrnoを返します。
    /// </summary>
    /// <param name="src">元の値</param>
    /// <param name="errno">エラーの際に返る値</param>
    /// <returns>変換値</returns>
    public static int Int(object src, int errno)
    {
        int    dst;
        float  fdst;
            
        if (src == null)
        {
            return errno;
        }
            
        string	srcstr = src.ToString();
            
        if (int.TryParse(srcstr, out dst) == false)
        {
            if (float.TryParse(srcstr, out fdst) == false)
            {
                return errno;
            }
            if (Single.IsNaN(fdst) == true)
            {
                return errno;
            }
                
            dst = (int)fdst;
        }
            
        return dst;
    }
}

実行

int[] numbers =
{
    EasyParse.Int("123"),
    EasyParse.Int("0123"),
    EasyParse.Int(""),          // 0 を返す
    EasyParse.Int(null, -1),    // 指定したエラー値 -1 を返す
    EasyParse.Int("5.8")        // 切り捨てて 5
};

Debug.Log(string.Join(", ", numbers));

終わりに

正直自由度の高い int.TryParse を劣化矯正しているとも言えるのですが、大量にキャストする必要がある場合、かつ明示的なエラー表記が不要な場合には、こういったクラスが地味に効いてくるかもしれません。

返信を残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA