数字文字列から数字を抜き出すには、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 を劣化矯正しているとも言えるのですが、大量にキャストする必要がある場合、かつ明示的なエラー表記が不要な場合には、こういったクラスが地味に効いてくるかもしれません。



