2009-06-03 12 views
15

Ich habe zwei Funktionen in meiner Klasse mit diesen Signaturen,Was ist der beste Weg, um zu konvertieren Action <T> zu Func?

public static TResult Execute<TResult>(Func<T, TResult> remoteCall); 
public static void Execute(Action<T> remoteCall) 

Wie kann ich die gleich Delegierten in der zweiten Methode zum ersten passieren? Das Erstellen einer Methode mit dem Delegate-Argument ist kein Weg, da ich einige Ausnahmeinformationen verloren habe
Vielen Dank!

Antwort

30

Wickeln Sie es in einem Delegaten des Typs Func<T, TResult> mit einem Dummy-Rückgabewert, z.

8

Sie fragen buchstäblich, etwas zu übergeben, das kein Ergebnis zu einer Funktion liefert, die es erfordert.
Dies ist unsinnig.

Sie leicht jede Funktion der Form Action<T> zu Func<T,TResult> umwandeln können, wenn Sie etwas Ergebniswert (implizit oder explizit)

Func<T,TResult> MakeDefault<T,TResult>(Action<T> action) 
{ 
    return t => { action(t); return default(TResult);}; 
} 

oder

Func<T,TResult> MakeFixed<T,TResult>(Action<T> action, TResult result) 
{ 
    return t => { action(t); return result; }; 
} 
zu liefern bereit sind,
Verwandte Themen