下記のC#コードをコンパイルすると"未割当てのローカル変数"fact"が使用されました。"というエラーメッセージが表示され、コンパイルできない。fact実行時にはfactは確定していることは明白なので、このエラーは不当と思われる。そもそも匿名メソッド内で使われている匿名メソッド外部のローカル変数が未割り当てかどうかを、コンパイラがチェックするという方針が適切ではない。 Func<int, int> fact = n => { if (n == 0) return 1; return fact(n - 1) * n; };