型推論について少し検索しましたが、特定の問題に解決策を適用できないようです。
関数の構築と受け渡しで多くの作業を行っています。これは、int型を推測できるように思えます。私が考えることができる唯一のことは、ラムダの戻り値の型が型推論アルゴリズムによってチェックされていないということです。問題をより明確に示すために、不必要なロジックを削除しました。
Func<T> Test<T>(Func<Func<T>> func)
{
return func();
}
これはコンパイルされます:
Func<int> x = Test<int>(() =>
{
int i = 0;
return () => i;
});
しかし、これにより、「メソッドの型引数は使用法から推測できません。型引数を明示的に指定してみてください」というエラーが発生します。
Func<int> x = Test(() =>
{
int i = 0;
return () => i;
});
このように動作する理由と回避策を知りたいだけだと思います。