C#方法重载解析

时间:2015-11-01 13:17:20

标签: c#

我有以下代码无法编译:

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#编译器没有选择第一个方法重载。

我的评论:

  1. 我知道我可以手动创建TestOverload.Call(new Action(TestFunc));之类的委托。

  2. 此行为与Task类的特殊处理无关。

0 个答案:

没有答案