.NETやり始めた人に
int.ParseとConvert.ToInt32って何が違うの?
という質問をたまに受けるので、忘れない内にメモメモ。 どっちを使えばいいのか分からないことが多いみたい。
私個人は、ほとんどの場合で、TryParse使うのであんまり気になったことがないです。 ParseとかToInt32使うのは確実に数値が入っている場合だけです。
違いなのですが、僅かにあります。
- int.Parseはnullを渡すと例外が発生します。(ArgumentNullException)
- Convert.ToInt32はnullを渡しても例外が発生しません。 (0が返ってきます。)
サンプル
結果
【****** int.Parse ******】 123 int.Parse(null) ==> 例外発生, 値を Null にすることはできません。 パラメーター名:String int.Parse('') ==> 例外発生, 入力文字列の形式が正しくありません。 【****** Convert.ToInt32 ******】 123 0 Convert.ToInt32('') ==> 例外発生, 入力文字列の形式が正しくありません。 【****** int.TryParse ******】 True False False
Decompileしてみるとわかりますが、Convert.ToInt32メソッドはnullかどうかを判定していてnullの場合に初期値を返し、それ以外の場合はint.Parseを呼び出しています。なのでnull渡してもエラーになりません。
参考URL
過去の記事については、以下のページからご参照下さい。
- いろいろ備忘録日記まとめ
サンプルコードは、以下の場所で公開しています。