2017-04-03 68 views
0

我正在嘗試向ASP .Net核心應用程序實現小型控制檯類命令。我有一個類存儲的名稱和方法,應運行:從Action.Invoke獲取方法的返回

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>。如果不是以正確的方式進行設計,是否有辦法以這種方式設計方法的回報?

+2

'Action'類型不返回值。它是'void'方法的代表。 – JohanP

回答

0

由於它是在一個documentationAction指出:

封裝沒有參數和不返回 的方法。

public delegate void Action() 

這就是說,你不能達到你想要與動作。在另一方面,一個Func<TResult>

封裝沒有參數和返回的 由TResult參數指定的類型的值的方法。

所以在你的情況下,你需要一個Func而不是Action。如果我們說你期望你的方法總是返回一個int,你應該有Func<int>等。Furthremore,如果你的方法有任何的話,Funcs作爲Actions可以得到一個參數列表。所以舉個例子,如果你有一個方法需要兩個int類型的參數並且返回另一個int,那麼你的Func的簽名就是Func<int,int,int>