13

<datatype>.parse.Netでは、またはを使用して文字列値を別のデータ型に読み込むことができますConvert.To<DataType>

私は解析と変換の基本に精通していないので、どちらがより良い/より速い/より適切であるかを尋ねられたとき、私はいつも途方に暮れています。

では、どのような状況でどちらの方法が最適ですか?

4

5 に答える 5

15

メソッドは、正しいタイプまたは類似のタイプで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の方が高速です。

于 2008-08-20T18:28:41.983 に答える
5

これがあなたへの答えです:

http://www.dotnetspider.com/forum/ViewForum.aspx?ForumId=77428

.NETの最新バージョンでは、変換が機能することに疑いがある場合は、どのような場合でもTryParseを使用するのが最善の方法だと思います。

于 2008-08-20T18:11:09.857 に答える
3

私はTryParseの大ファンです。これは、解析しようとしている値が適切なタイプでない可能性がある場合に、エラーをキャッチするという頭痛の種を大幅に軽減するためです。

私の注文は通常:

  • 解析(値が正しいタイプであると確信できる場合、これを確実にしようとします)
  • TryParse(ユーザー入力が含まれる場合、または制御できないシステムからの入力がある場合に発生する、確信が持てない場合)
  • Convert(ParseとTryParseを使い始めてから使用していないと思いますが、間違っている可能性があります)
于 2008-08-20T18:30:46.253 に答える
1

オブジェクトのタイプが確実である場合にのみ使用する必要があるDirectCastメソッドもあります。高速ですが、適切なチェックは行われません。各列の型がわかっているときに、緩く型付けされたDataTableから値を抽出するときに、DirectCastを使用します。

于 2008-08-20T18:12:54.300 に答える
1

スピードが必要な場合は、ダイレクトキャストが最速の方法だと確信しています。そうは言っても、私は通常.Parseまたは.TryParseを使用します。これは、読みやすく、より予測可能な方法で動作するように見えるためです。

Convertは、実際には内部でParseを呼び出していると思います。ですから、そこにはほとんど違いはなく、それは本当に個人的な好みの問題のようです。

于 2008-08-20T18:12:58.590 に答える