2010-08-02 3 views
23

F # Powerpack kommt mit einer Reihe von Konvertierungsmethoden von Func < ...> zu F # Funktionen, entweder Standard oder Tupled. Aber ist es möglich, das Gegenteil zu erreichen: Wenn Sie vom F # -Code eine C# -Methode aufrufen möchten, die Func < ...> verwendet und nativen F # Lambda-Ausdruck verwenden möchten (z. B. Spaß x -> Some_Function_of (x))?Interop zwischen F # und C# lambdas

Wenn ich eine F # Funktion mit einer Unterschrift Senden '->' b auf eine C# Methode, die erwartet Func dann F # -Compiler die folgenden Fehler erzeugt:

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

I mit F # Lambda-Ausdrücke bleiben will, aber eine Übersetzungsebene zu verwenden, um sie als C# Func Lambda senden zu können. Ist das erreichbar?

+1

Für alle, die Probleme beim Finden der Konvertierungsmethoden in PowerPack, die hier erwähnt werden, sind sie in FSharp.PowerPack.Linq, FuncConvertExtensions –

Antwort

30

F # stellt Konstruktoren für alle Delegattypen bereit, die F # -Werte der entsprechenden Funktionstypen verwenden. Z.B. In Ihrem Fall möchten Sie System.Func<_,_>(fun x -> ...) verwenden, die den generierten Konstruktor vom Typ ('a -> 'b) -> System.Func<'a, 'b> anwendet.

+0

Natürlich! Danke für eine schnelle Antwort. –

+1

gilt dies auch für Ausdruck > 'auch? – Maslow

+0

Manchmal lohnt es sich, auf die dritte Seite der Google-Ergebnisse zu gehen. A ++++ würde wieder upvote. –