我有以下代码无法编译:
class TestOverload
{
public static void Call(Action func) { }
public static void Call(Func<Task> func) { }
}
static void TestFunc() { }
static void Main(string[] args)
{
TestOverload.Call(TestFunc); // Error
TestOverload.Call(() => { TestFunc(); }); // No error, the first overload is chosen
TestOverload.Call(async () => { await SomeTask(); }); // No error, the second overload is chosen
}
错误是:
&#39; void Program.TestFunc()&#39;有错误的返回类型
我想知道为什么在这种情况下C#编译器没有选择第一个方法重载。
我的评论:
我知道我可以手动创建TestOverload.Call(new Action(TestFunc));
之类的委托。
此行为与Task
类的特殊处理无关。