5年以上前の話に今さら感はあるのですけど、
C#の型推論について調べていて、へぇーと思ったのでメモですの。

2010-09-29 C#のvarとtry~catchが糞すぎる
http://d.hatena.ne.jp/yaneurao/20100929 

ものすごく大雑把に言うと、↓のようなコードをvarを使って書くとコンパイル通らない、という問題ですの。
HogeClass hoge = null;
try {
    hoge = new HogeClass();
    hoge.XXX();
} catch {
    if (hoge!=null)
        hoge.YYY();
}
直接的な問題は、ここで、
var hoge = null;
とすると、コンパイルが通らないことですの。
var hoge; 
でも同じく。

そこでC#の型推論が甘い、という話になるのですけど、

ただ、この書き方を許すということは、
コンパイル時に↓のようなコードを弾かなければいけなくなるということで、

var hoge = null;
if(てきとうな式){
 hoge = 1;
}else{
 hoge = "文字";
}

それって、すごく大変じゃない? と思ってこれを書き始めたわけなのですけど、元の記事からリンク貼ってあったページを見ると、

[C#][Nemerle]C#の型推論は怠けすぎ
http://d.hatena.ne.jp/akiramei/20100929/1285759272

関数型、あるいは関数型寄りの言語なんかでは、普通に実現できていることのようで、なんか型推論ってすごいんだなぁって、5年以上前の記事を読んで思ったのですの。

この辺りは、よくも悪くも、「よその言語のおいしいところを、つまみ食い」してるに過ぎないC#の限界なのかもしれないですの(ドヤ顔)


ちなみに、一行でこう書いても↓ダメでしたの。当たり前だけど。
var hoge = (true == false) ? 1 : "文字";

おめでとうございましたの