我只是偶然发现以下行为,我没有看到动机。
考虑以下方法:
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表达式而不是方法组时,为什么它可以工作?