DateTimeにnullを代入しようとすると怒られる件

C#ではDateTimeを値型として扱うため、DateTime型の変数にnullを代入することはできない。

しかし、C#でプログラムを組んでいると、DateTime型の変数をnullで初期化したり、DateTimeを返す関数でnullを返したいときがあり、不便きわまりない。

たとえば、下のコードはコンパイルエラーになる。

public DateTime SomeFunction()
{
  //(中略)

  return null; //←ここでコンパイルエラー
}

それで、世の中のプログラマはこの問題にどうやって対応しているのかをぐぐって調べてみた。ありがちなのは、null的に使うDateTime型の値を決めておき、それを使うという方法。たとえば、

new DateTime(0);

を「null的なDateTime」として使う。上のコードではUNIX紀元(1970/01/01 00:00:00)が作成されるんだが、そんな時刻を他にプログラムの中で使わないということが明らかなら、これをnullの代用として使うことができる。

他には、sourceforgeにNullableTypesというのがあり、nullを代入可能なC#の値型のクラス群が提供されている。これを使うというのもある。