2009-06-03 11 views
15

Ho due funzioni nella mia classe con questo firme,Qual è il modo migliore per convertire l'azione <T> in Func <T,Tres>?

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

Come posso passare lo stesso delegato nel secondo metodo per il primo? Creare un metodo con l'argomento Delegate non è un modo, perché sto perdendo alcune informazioni sulle eccezioni
Grazie mille!

risposta

30

Avvolgere in un delegato di tipo Func<T, TResult> con un valore restituito fittizio, ad es.

public static void Execute(Action<T> remoteCall) 
{ 
    Execute(t => { remoteCall(t); return true; }); 
} 
8

si sta chiedendo letteralmente di passare qualcosa che non fornisce un risultato a una funzione che lo richiede.
Questo non ha senso.

è possibile convertire facilmente qualsiasi funzione della Forma Action<T> per Func<T,TResult> se si è disposti a fornire un certo valore risultato (implicitamente o esplicitamente)

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

o

Func<T,TResult> MakeFixed<T,TResult>(Action<T> action, TResult result) 
{ 
    return t => { action(t); return result; }; 
} 
Problemi correlati