読者です 読者をやめる 読者になる 読者になる

いろいろ備忘録日記

主に .NET 絡みのメモを公開しています。

int.ParseとConvert.ToInt32の僅かな違い

.net C#

.NETやり始めた人に

int.ParseとConvert.ToInt32って何が違うの?

という質問をたまに受けるので、忘れない内にメモメモ。 どっちを使えばいいのか分からないことが多いみたい。

私個人は、ほとんどの場合で、TryParse使うのであんまり気になったことがないです。 ParseとかToInt32使うのは確実に数値が入っている場合だけです。

違いなのですが、僅かにあります。

  • int.Parseはnullを渡すと例外が発生します。(ArgumentNullException)
  • Convert.ToInt32はnullを渡しても例外が発生しません。 (0が返ってきます。)

サンプル

int.ParseとConvert.ToInt32の違い

結果

【****** 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

stackoverflow.com


過去の記事については、以下のページからご参照下さい。

サンプルコードは、以下の場所で公開しています。