2008-08-20 14 views
13

.Netでは、<datatype>.parseまたはConvert.To<DataType>のいずれかを使用して、文字列値を別のデータ型に読み取ることができます。.Net解析と変換

私はパース対コンバートの基本に精通していないので、どの方が良い/より速い/より適切かを尋ねると、私はいつも迷っています。

どのような状況でどのように最適ですか?

答えて

15

Convert.ToXXX()の方法は、正しいまたは同様のタイプであるかもしれないオブジェクトに対して、次のとおりです。

//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が高速です。

1

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

1

スピードが必要な場合は、直接キャストが最速の方法であることは間違いありません。つまり、私は通常、.Parseまたは.TryParseを使用します。これは、読みやすくするために、より予測可能な方法で動作するように思われるからです。

実際にConvertはフードの下でParseを呼び出します。だからそこにはほとんど違いはなく、実際には個人的な好みの問題だと思われます。 .Parse().TryParse()が文字列のために特別にしている間

3

私はTryParseの大きなファンです。あなたが解析しようとしている値が適切なタイプでない可能性があるときに、エラーをキャッチする頭痛をたくさん覚えています。

私の順番は通常、次のとおりです。

  • 解析(I値が正しい型になることを確認することができ、そして、私はこれを確実にしようとしない場合)
  • TryParse(私は確認することができない場合私は、私が解析し、TryParseを使用し始めてから、私が使用していないが、私は間違っている可能性が考えて、そのユーザ入力が関与している時はいつでも起こる、またはあなたがコントロールすることはできませんシステムからの入力)
  • 変換()