通常、C#コンパイラは、メソッドのバインドと型引数の推論について賢明です。しかし、私はそれを困惑させたようです。
class Obj
{
void Handler( int a, int b ) { }
Obj() { Method( "", Handler ); }
public void Method<T>( T t, Action<T> action ) { }
public void Method<T, U>( T t, Action<U, U> action ) { }
}
このMethod
呼び出しにより、コンパイラエラーが発生します。
引数2:「メソッドグループ」から「System.Action」に変換できません。
コンパイラが呼び出しが2番目のオーバーロードに適合することに気付かないのはなぜですか?Method<string, int>( "", Handler )
またはのように呼び出しをより明示的にすることでコンパイルできますMethod( "", (Action<int, int>)Handler )
。しかし、なぜこれが必要なのですか?