C#での型変換

小野さんのC#ではじめるプログラミング入門第5回にて、Parse()メソッドによるstringからintへの型変換の方法が説明されていますが、.Net Frameworkでは型変換のこれ以外の方法として、Convertクラスの変換用メソッドも用意されています。また、キャストによる型変換も用意されています。(ただしstring型から数値型、またその逆は行えません。)
[Exp. 一部小野さんのコードを借用]
string s1 = “10”;
int i1, i2;
i1 = System.Int32.Parse(s1);
System.Console.WriteLine(i1);
i2 = System.Convert.ToInt32(s1);
//これは許されない
//i2 = (int)s1;
System.Console.WriteLine(i2);
ここで疑問なのは、Parseメソッドを使う場合と,System.Convert.ToInt32メソッドを使う場合とではどちらがコストが低いのか、もしくは同じなのかという疑問です。
ただ、引数や、実際の動作を考えると元は同じかなともいますが。

3 thoughts on “C#での型変換”

  1. あ、記事中でははぶいちゃったかな?
    SSCLIの実装みると、Convert.ToInt32の中でParseを呼んでます。
    なので、Parseのほうがちょっとだけコストが低いかな、という感じです。
    ただ、空文字を渡したときだったかの処理がConvert.ToInt32のほうに入っているので、一点だけ処理結果が異なってるという点に注意が必要です。

  2. 書き込みありがとうございます。
    あーConvertはParseを読んでるのですか。逆か、共通のCLRのタスクを呼び出している物と思っていました。
    基本的にはParseを使っていた方が良さそうですね。

  3. 実はドキュメントの読み方によっては、Parseを読んでるらしいことがわかったりして。
    http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfsystemconvertclasstoint32topic13.asp
    「戻り値は、value に対して Int32.Parse メソッドを呼び出した結果得られる値です。」
    でも、一点だけ動きが違うことには触れられてないんですよね。。。

コメントを残す