tsucchi’s diary(元はてなダイアリー)

はてなダイアリー(d.hatena.ne.jp/tsucchi1022)から移行したものです

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 型は使わない、くらいのほうがいいのかもしれん。。。