2010-08-02 21 views
23

F # powerpack viene fornito con una serie di metodi di conversione per tradurre da Func < ...> a funzioni F #, standard o tuple. Ma è possibile ottenere il contrario: nel caso si voglia chiamare dal codice F # un metodo C# che prende Func < ...> e si desidera utilizzare l'espressione lambda nativa F # (ad esempio fun x -> some_function_of (x))?Interop tra F # e C# lambda

Se invio una funzione F # con una firma 'a ->' b per un metodo C# che si aspetta Funz allora F # compilatore genera il seguente errore:

This expression was expected to have type Function<'T,'R> but here has type 'T -> 'R

voglio restare con F espressioni # lambda, ma utilizzare un livello di traduzione per poterli inviare come C# Func lambda. È possibile?

+1

Per chiunque abbia problemi a trovare i metodi di conversione in PowerPack menzionati qui, sono in FSharp.PowerPack.Linq, FuncConvertExtensions –

risposta

30

F # fornisce costruttori per tutti i tipi di delegati che accettano valori F # dei tipi di funzione corrispondenti. Per esempio. nel tuo caso si desidera utilizzare System.Func<_,_>(fun x -> ...) che applica il costruttore generato di tipo ('a -> 'b) -> System.Func<'a, 'b>.

+0

Ovviamente! Grazie per una rapida risposta. –

+1

si applica anche a 'Expression >'? – Maslow

+0

A volte vale la pena andare alla terza pagina dei risultati di Google. A ++++ avanzava di nuovo. –

Problemi correlati