Nullable 型の ToString()
友人が mixi で「Nullable 型 で null なときに、ToString()を呼んだら ぬるぽ じゃなくて、""が返ってきてびっくりしたぜ」的なことが書いてたので、「おいおいそんなことないだろ」と思い、ちょっと書いてみました。
using System; using System.Collections.Generic; using System.Text; using NUnit.Framework; namespace a { [TestFixture] public class Class1 { [Test] public void NullableIntTest() { int? i = null; Assert.AreEqual("", i.ToString()); } [Test] public void NullIntegerTest() { //Int32 i = null; //これはダメ(コンパイルエラー) Int32? i = null; Assert.AreEqual("", i.ToString()); } } }
テスト通っちゃいます。友人の書いてたとおりです。うーん、やな感じ。あと、コメントアウトしてる
Int32 i = null;
が通らないのも、ちょっと嫌な感じ。Java の Integer は普通のオブジェクトだもんね。
もちろん、string 型とかのオブジェクトなら、
[Test] [ExpectedException(typeof(NullReferenceException))] public void StringNullTest() { string s = null; s.ToString(); Assert.Fail("NOT REACHED!!"); }
これが通ります。(NullReferenceException が発生する)
「気をつけましょう」としか言えないのかなぁ。。。あるいはいっそ、Nullable 型は使わない、くらいのほうがいいのかもしれん。。。