最適化をオンにしてコンパイルするかどうかに応じて、メソッドごとに異なる結果が得られます。基本的にいくつかのオプションがあります。
object o;
//checking with is
o is int
//check type
o.GetType() != typeof( int )
//cast and catch exception
try{ int j = (int) o; }
catch {}
//use the tryparse
int.TryParse( Convert.ToString( o ), out j )
これらの10,000回のそれぞれを試行し、それぞれの期間を返すコンソールアプリを簡単に設定できます(oがintの場合と、それ以外の場合のテスト)。
このtry-catch
メソッドは、オブジェクトがintを保持している場合は最も速く、保持していない場合ははるかに遅くなります(よりも遅くなりますGetType
)。 int.TryParse
文字列がある場合はかなり高速ですが、不明なオブジェクトがある場合は遅くなります。
興味深いことに、.Net 3.5と最適化をオンにすると、oが実際にintである場合o is int
と同じ時間がチェックにかかります。oが実際に何か他のものである場合、わずかに遅くなります。try-catch
o is int
迷惑なことに、次のようなことを行うと、FxCopは警告をスローします。
if( o is int )
int j = (int) o;
しかし、これはFxCopのバグだと思います。intが値型であることがわからないため、o as int
代わりに使用することをお勧めします。
入力が常に文字列である場合は文字列int.TryParse
が最適です。そうでない場合は、is
演算子が最も速くなります。
文字列があるので、それがdoubleではなくintであることを知る必要があるかどうかを調べます。int.TryParse
合格した場合はdouble.TryParse
、チェックの数を半分にすることができます。intを期待する場合は、doubleまたはstringのいずれかを返し、doubleをフロアします。