ぽざうねっと

ホーム 連絡をする 同期する ( RSS 2.0 ) Login
投稿数  396  : 記事  0  : コメント  1030  : トラックバック  66

ニュース

さて、今年の秋は何を漬けようか

書庫

日記カテゴリ

Accessory

Community

Private

昔、NullReferenceException が発生して原因追求に結構時間がかかったことがあった
原因は null を int でキャストしていたから
NullReferenceException っていうのはインスタンスメンバ使用時に起こるのが当たり前すぎて、まさかこんなとこで出るとは思ってもいなかった
しかし、何で InvalidCastException じゃないんだろう?
意味合い的には、そっちの方が自然な気がするんだけどなぁ
投稿日時 : 2006年11月28日 23:16

コメント

# re: null を int でキャストする 2006/11/28 23:36 じゃんぬ
Null に対しての操作はいかなる場合も、NullReferenceException が適切だと思います。
キャストが内部的に何が行われているか知っていれば、違和感はないと思いますが...

インスタンスありきでの操作なのですから、適切だと思いますよ。

# re: null を int でキャストする 2006/11/28 23:50 επιστημη
届いた荷物が注文の品か確認すべく包みを開いたら空だった。ってときゃ:
「注文とちゃうぞ!(InvalidCast)」 よりむしろ
「からっぽやんけ!(NullReference)」 でしょうねぇ♪


# re: null を int でキャストする 2006/11/29 0:36 THREE-ONE
ご意見ありがとうございます。
null を参照しているということは理解できるのですが、
例えば null を string にキャストすると、コード上は問題ないわけでして
null を許容しない型に null をキャストしようとしたから例外が出るのなら、「null を許容しない型にキャストしようとした」というプロセスがおかしい→InvalidCastException の方が適切じゃないの?と思ったわけであります。

うーむ、考え方がおかしいのかな?

# re: null を int でキャストする 2006/11/29 1:03 επιστημη
あー、なるほど。
コンパイラのキモチになってみると、だ。
nullをSystem.Int32にcastする、これはおっけい。
でけたSystem.Int32をintにun-boxingすべく包みを開けた...からっぽぢゃん!! ってなことをやったように見えますです。
# 内実はわからんけども。

直接的に「nullを値に変換できるわきゃねーぢゃん!」ってことでInvalidCastでもえぇとは思うですがね ^^;


# re: null を int でキャストする 2006/11/29 10:11 επιστημη
うぁぁぁ、違うよ違うよ Int32は値型だから null を代入できないよ。


# re: null を int でキャストする 2006/11/29 20:08 THREE-ONE
MSDN に MSIL の unbox 命令は対象が null の場合は NullReferenceException を throw するってちゃんと書いてありました。
なんで、前は見つけられなかったんだろう、ああああ

キャストという行為は型ありき、null はそもそも型もなんもないから InvalidCastException 以前の問題と考えたらいいのかなと思いました


Post Feedback

タイトル
名前
Url:
コメント: