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