2010-08-02 26 views
23

F # powerpack, Func < ...> F # işlevlerinden standart veya tupled olanları dönüştürmek için bir dizi dönüştürme yöntemi ile birlikte gelir. Fakat bunun tersi de mümkündür: F # kodundan Func < ...> alan bir C# yöntemini aramak istediğinizde ve yerel F # lambda ifadesini kullanmak istediğinizde (örn. Fun x -> some_function_of (x))?F # ve C# lambdas Arasındaki ilişki

Bir imzası ile bir F # fonksiyonunu gönderirseniz 'a ->' b Func sonra F # derleyicisi aşağıdaki hata üretir beklediği bir C# yöntemine:

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

Ben F # lambda ifadeleri ile kalmak istiyorum ama C# Func lambda olarak gönderebilmek için çeviri katmanını kullanmak. Bu ulaşılabilir mi?

+1

Burada belirtilen PowerPack'de dönüştürme yöntemlerini bulmakta sorun yaşayanlar için, bunlar FSharp.PowerPack.Linq, FuncConvertExtensions –

cevap

30

F #, ilgili işlev türlerinin F # değerlerini alan tüm delege türleri için kurucular sağlar. Örneğin. Sizin durumunuzda, ('a -> 'b) -> System.Func<'a, 'b> türünde oluşturulmuş yapıcıyı uygulayan System.Func<_,_>(fun x -> ...) kullanmak istiyorsunuz.

+0

Elbette! Hızlı cevap için teşekkürler. –

+1

bu, 'Ekspresyon > 'için de geçerlidir? – Maslow

+0

Bazen Google sonuçlarının üçüncü sayfasına gitmeyi öder. A ++++ tekrar kazanacaktır. –

İlgili konular