通常,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”。
为什么编译器没有注意到调用适合第二个重载?我可以通过在Method<string, int>( "", Handler )
or中使调用更明确来编译它Method( "", (Action<int, int>)Handler )
。但为什么这是必要的?