質問
.Net では、次のいずれかを使用して文字列値を別のデータ型に読み取ることができます。 <datatype>.parse
または Convert.To<DataType>
.
私は解析と変換の基本に慣れていないので、どちらが優れているか、より速く、より適切であるかを尋ねられるといつも迷ってしまいます。
それでは、どのような状況でどの方法が最適なのでしょうか?
解決
の Convert.ToXXX()
メソッドは、正しいタイプまたは同様のタイプのオブジェクト用です。 .Parse()
そして .TryParse()
特に文字列用です:
//o is actually a boxed int
object o = 12345;
//unboxes it
int castVal = (int) 12345;
//o is a boxed enum
object o = MyEnum.ValueA;
//this will get the underlying int of ValueA
int convVal = Convert.ToInt32( o );
//now we have a string
string s = "12345";
//this will throw an exception if s can't be parsed
int parseVal = int.Parse( s );
//alternatively:
int tryVal;
if( int.TryParse( s, out tryVal ) ) {
//do something with tryVal
}
最適化フラグを使用してコンパイルする場合、TryParse は非常に高速です。これは文字列から数値を取得する最良の方法です。ただし、int または文字列の可能性のあるオブジェクトがある場合は、Convert.ToInt32 の方が高速です。
他のヒント
答えは次のとおりです。
http://www.dotnetspider.com/forum/ViewForum.aspx?ForumId=77428
最新バージョンの .NET では、変換が機能するかどうか疑問がある場合は、いかなる場合でも TryParse を使用するのが最善策だと思います。
私は大ファンです TryParse, 解析しようとしている値が適切な型ではない可能性がある場合に、エラーをキャッチするという頭痛の種が大幅に軽減されるためです。
私の注文は通常次のとおりです。
- 解析 (値が正しい型であると確信でき、それを確実にしようとする場合)
- TryParse (確信が持てない場合、これはユーザー入力が関係する場合、または制御できないシステムからの入力がある場合に必ず発生します)
- Convert (Parse と TryParse を使い始めて以来、使っていないと思いますが、間違っている可能性があります)
DirectCast メソッドもありますが、これはオブジェクトの種類がわかっている場合にのみ使用してください。高速ですが、適切なチェックは行われません。各列の型がわかっている場合、大まかに型指定された DataTable から値を抽出するときに DirectCast を使用します。
スピードが必要な場合は、ダイレクトキャストが最も速い方法であると確信しています。そうは言っても、私は通常、.Parse または .TryParse を使用します。これは、読みやすく、より予測可能な方法で動作するように見えるためです。
Convert は実際には内部で Parse を呼び出していると思います。したがって、そこにはほとんど違いはなく、実際には個人的な好みの問題のようです。