动作委托可以指向具有返回类型的方法吗?

Mai*_*sak 3 .net c# delegates

动作委托可以指向具有返回类型的方法吗?例如

Action a = () => Add();  
int Add()
{
  return 5 + 6;
}
Run Code Online (Sandbox Code Playgroud)

上面的代码编译.现在如果我写上面的东西就像

Action a = new Action(Add);
Run Code Online (Sandbox Code Playgroud)

这不编译.有谁能帮助我理解这背后的逻辑?

Igo*_*gor 5

Action a = () => Add();  
int Add()
{
  return 5 + 6;
}
Run Code Online (Sandbox Code Playgroud)

在功能上等同于

Action a = ExecuteAdd;
int Add()
{
  return 5 + 6;
}
void ExecuteAdd() 
{
  Add();
}
Run Code Online (Sandbox Code Playgroud)

并且Action a = new Action(ExecuteAdd);会编译.

原因是() => Add();实际上创建了一个匿名方法.将其分配给类型的变量会Action推断返回类型void.