2017-04-03 8 views
0

ASP .Net Core Appに小さなコンソールのようなコマンドを実装しようとしています。私は実行する必要があります名前とメソッドを保存するクラスがあります。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.ActionSystem.Func<object>に変換することはできません。正しい方法でない場合、この方法で設計されたメソッドからのリターンを得る方法はありますか?

+2

'Action'タイプは値を返しません。 'void'メソッドの代理人です。 – JohanP

答えて

0

それはActiondocumentationで述べられているように:

はパラメータを有していないと を返さないメソッドをカプセル化。

public delegate void Action() 

あなたがアクションで欲しいということを達成することはできません言われていること。一方、Func<TResult>

はパラメータを有していないと TResultパラメーターによって指定された型の値を返すメソッドをカプセル化。

あなたのケースではActionではなくFuncが必要です。あなたのメソッドが常にintを返すことを期待しているとすれば、Func<int>などが必要です。さらに、アクションとしてFuncsには、メソッドがあればパラメータのリストを取得できます。したがって、たとえば、int型の2つのパラメータを取り、別のintを返すメソッドがある場合、Funcの標識は、Func<int,int,int>になります。

関連する問題