http://blogs.wankuma.com/rti/archive/2009/08/12/180078.aspx
僕はアリだと思うんだぜ
上記のエントリーのコメントで、trapemiya さんからいただいた話題です。
null 許容型を引数に持つメソッド
のオーバーロードで、メソッドに null を指定して呼び出したときの時に、どのメソッドが実行されるのかがわからないのです。
次のコードを実行すると、コンソールウィンドウに "int" と表示されます。
static void Main(string[] args)
{
hoge(null);
Console.ReadLine();
}
static void hoge(double? a){
Console.WriteLine("double");
}
static void hoge(int? a){
Console.WriteLine("int");
}
ちなみに、byte と int のオーバーロードだと、byte が実行されます。
当然ですが、次のコードのように、型をきちんと指定すれば double が実行されます。
static void Main(string[] args)
{
double? a = null;
hoge(a);
Console.ReadLine();
}
ということで、あえて直接 null を渡さなければ問題なさそうですが、この場合は、コンパイルエラーになって欲しい気もしますね。