当与方法组一起使用时,为什么Foo(Action bar)和Foo(Func <task> bar)不明确?

时间:2016-05-04 14:43:37

标签: c# overload-resolution

我只是偶然发现以下行为,我没有看到动机。

考虑以下方法:

void Foo(Action bar)
{
     bar();
     Console.WriteLine("action");
}

async Task Foo(Func<Task> bar)
{
    await bar();
    Console.WriteLine("func");
}

void Bar()
{
}

此定义导致编译器错误,指出对Foo的调用在两种方法之间不明确:

void Baz()
{
    Foo(Bar); // <-- compiler error here
}

然而,这很好用:

void Baz()
{
    Foo(() => Bar());
}

为什么这甚至含糊不清(Bar()没有返回Task,因此Bar不应该是Func<Task>)?当我使用lambda表达式而不是方法组时,为什么它可以工作?

0 个答案:

没有答案