2015-04-29 12 views
9

Ho il seguente delegato definito:Convertire Func delegare

public delegate object MyDelegate(dynamic target); 

E ho un oggetto Func<dynamic, object>:

Func<dynamic, object> myFunc 

Come posso convertire i myFunc a MyDelegate?

ho provato queste istruzioni, nessuno di loro ha funzionato:

MyDelegate myDeleg = myFunc; 
MyDelegate myDeleg = (MyDelegate) myFunc; 
MyDelegate myDeleg = myFunc as MyDelegate; 
+7

Penso che il più bello sia "MyDelegate myDeleg = myFunc.Invoke;", da [Cast delegate a Func in C#] (http://stackoverflow.com/a/1907135/7586). C'è anche 'MyDelegate myDeleg = new MyDelegate (myFunc)' – Kobi

risposta

9

si può avvolgere il delegato esistente:

(MyDelegate)(x => myFunc(x)) 

o equivalentemente:

MyDelegate myDeleg = x => myFunc(x); 

Questo provoca un piccolo perdita di prestazioni su ogni invocazione ma il codice è molto semplice.

+0

Giusto per essere espliciti, questo è 'MyDelegate myDeleg = x => myFunc (x);' - senza casting. – Kobi

+0

Wow, non posso credere di non aver pensato a questo. Grazie mille! –

Problemi correlati