从Action.Invoke返回方法

时间:2017-04-03 04:35:57

标签: c#

我正在尝试向ASP .Net Core App实现类似控制台的小命令。我有一个类存储应该运行的名称和方法:

public class ActionCenter
{
    public string ActionName { get; set; }
    public Action ActionStart { get; set; }
}

我有一个列表List<ActionCenter> Actions,其中存储了与它们相关的所有命令和方法。要运行方法,我可以Actions[0].ActionStart.Invoke,但我没有返回方法。我尝试了Task<object>但无法将System.Action转换为System.Func<object>。有没有办法从这种方式设计的方法返回,如果不是正确的方法?

1 个答案:

答案 0 :(得分:0)

正如documentationAction

所述
  

封装没有参数且不返回的方法   的

public delegate void Action()

据说你无法实现你想要的动作。另一方面,Func<TResult>

  

封装没有参数并返回值的方法   由TResult参数指定的类型。

因此,在您的情况下,您需要Func而不是Action。如果我们说你希望你的方法总是返回int,那么你应该有一个Func<int>等等。如果你的方法有任何意义,那么Funcs as Actions可以得到一个参数列表。因此,例如,如果你的方法有两个int类型的参数并返回另一个int,即你的Func的符号,它将是Func<int,int,int>