2017-04-03 8 views
0

Ich versuche, kleine Konsole-ähnliche Befehle zu ASP .Net Core App zu implementieren. Ich habe eine Klasse, die Namen und die Methode speichert, die ausgeführt werden soll:Erhalte die Rückgabe der Methode von Action.Invoke

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

Und ich habe eine Liste List<ActionCenter> Actions, wo ich speichern alle Befehle und Methoden mit ihnen verbunden sind. Um Methode auszuführen kann ich Actions[0].ActionStart.Invoke tun, aber ich habe keine Rückkehr der Methode. Ich versuchte Task<object>, aber kann System.Action zu System.Func<object> nicht umwandeln. Gibt es eine Möglichkeit, von Methoden zurückzukehren, die auf diese Weise entwickelt wurden, wenn nicht, was ist der richtige Weg?

+2

Der Typ "Aktion" gibt keinen Wert zurück. Es ist ein Delegierter für "void" -Methoden. – JohanP

Antwort

0

Wie es am documentation ein Action heißt:

Kapselt eine Methode, die keine Parameter hat und kehrt nicht ein Wert.

public delegate void Action() 

Dass Sie nicht, dass Sie mit einer Aktion wollen erreichen kann gesagt werden. Auf der anderen Seite ist eine Func<TResult>:

kapselt eine Methode, die keine Parameter und gibt einen Wert von der Typ durch die Parameter angegebene TResult hat.

Also in Ihrem Fall brauchen Sie eine Func anstatt eine Action. Wenn wir sagen, dass Sie erwarten, dass Ihre Methode immer eine int zurückgibt, sollten Sie eine Func<int> usw. haben. Weiter, Funcs als Aktionen können eine Liste von Parametern bekommen, wenn Ihre Methode irgendwelche haben wird. Wenn Sie zum Beispiel eine Methode haben, die zwei Parameter vom Typ int akzeptiert und einen anderen int zurückgibt, also die Signarture Ihres Func, wäre das Func<int,int,int>.

Verwandte Themen