同じメソッドのデリゲートを暗黙的に作成できるのに、ジェネリック関数にパラメーターとして渡されたときに、C# 3.0 コンパイラーがメソッドの型を推測できないのはなぜでしょうか。
次に例を示します。
class Test
{
static void foo(int x) { }
static void bar<T>(Action<T> f) { }
static void test()
{
Action<int> f = foo; // I can do this
bar(f); // and then do this
bar(foo); // but this does not work
}
}
foo
に渡してbar
、渡される関数のシグネチャからコンパイラに型を推測させることができると思っていAction<T>
ましたが、これは機能しません。ただし、キャストせずにAction<int>
fromを作成できるfoo
ので、コンパイラが型推論を介して同じことを行うことができないという正当な理由はありますか?