数字からなる文字列を数値に変換するには、「TIPS:文字列を数値に変換するには?」で解説しているように、Int32型やDouble型などのParseメソッドが利用できる。
しかしParseメソッドは、変換しようとしている文字列が正しい形式でない場合や、値がその数値型の範囲に収まっていない場合には変換に失敗し、例外を発生する。例外の発生にはコストがかかるため、変換が失敗する頻度が高いケースではアプリケーションのパフォーマンスが悪くなってしまう。
変換時に例外が発生しないようにするためには、あらかじめ文字列が数値として有効かどうかを精査する必要があるが、.NET Framework 2.0ではそのような処理を行った後に変換を行ってくれるTryParseメソッドが新しく追加されており、従来のParseメソッドの代わりに利用できる。
例外を発生しないTryParseメソッド
TryParseメソッドは、変換に失敗しても例外を発生しない。変換が成功した場合には戻り値としてtrueを返し、失敗した場合にはfalseを返す。
string number = "123456";
int output;
bool result = Int32.TryParse(number, out output);
Dim number As String = "123456"
Dim output As Integer
Dim result As Boolean = Int32.TryParse(number, output)
TryParseメソッドの第1パラメータには変換する文字列を指定する。指定可能な文字列の形式は従来のParseメソッドと同一である。
第2パラメータには変換された数値を受け取る数値型の変数を指定する(C#の場合にはoutキーワードが必須)。なお、変換に失敗した場合には、第2パラメータに指定した変数に0が代入される。
以下に変換が失敗する場合のサンプル・プログラムを示す。
// tryparse.cs
using System;
Class TryParse {
  static void Main() {
    string num = "this is not a number";
    int i;
    try {
      i = Int32.Parse(num);
    } catch {
      Console.WriteLine("変換失敗");
    }
    // 出力:変換失敗
    try {
      i = Convert.ToInt32(num);
    } catch {
      Console.WriteLine("変換失敗");
    }
    // 出力:変換失敗
    bool result = Int32.TryParse(num, out i);
    Console.WriteLine(result); // 出力:false
    Console.WriteLine(i); // 出力:0
  }
}
// コンパイル方法:csc tryparse.cs
tryparse.csのダウンロード
' tryparse.vb
Imports System
class TryParse
  Shared Sub Main()
    Dim num As String = "this is not a number"
    Dim i As Integer
    Try
      i = Int32.Parse(num)
    Catch
      Console.WriteLine("変換失敗")
    End Try
    ' 出力:変換失敗
    Try
      i = Convert.ToInt32(num)
    Catch
      Console.WriteLine("変換失敗")
    End Try
    ' 出力:変換失敗
    Dim result As Boolean = Int32.TryParse(num, i)
    Console.WriteLine(result) ' 出力:False
    Console.WriteLine(i) ' 出力:0
  End Sub
End Class
' コンパイル方法:vbc tryparse.vb
tryparse.vbのダウンロード
TryParseメソッドは、Boolean型(Boolean構造体)や数値型、DateTime構造体など、Parseメソッドを持っていたすべての基本的な型に追加されている(DateTime構造体には、従来のParseExactメソッドに対応するTryParseExactメソッドも追加されている。ParseExactメソッドについては「TIPS:日付や時刻の文字列をDateTimeオブジェクトに変換するには?」を参照していただきたい)。
利用可能バージョン:.NET Framework 2.0のみ
カテゴリ:クラス・ライブラリ 処理対象:文字列
使用ライブラリ:Int32構造体(System名前空間)
関連TIPS:文字列を数値に変換するには?
関連TIPS:日付や時刻の文字列をDateTimeオブジェクトに変換するには?
Copyright© Digital Advantage Corp. All Rights Reserved.