2010-08-02 32 views
23

F # powerpack đi kèm với một tập hợp các phương pháp chuyển đổi để dịch từ Func < ...> thành F # functions, hoặc standard hoặc tupled. Nhưng có thể đạt được điều ngược lại: trong trường hợp bạn muốn gọi từ mã F #, phương thức C# nhận Func < ...> và muốn sử dụng biểu thức lambda F # gốc (ví dụ: vui vẻ x -> some_function_of (x))?Interop giữa F # và C# lambdas

Nếu tôi gửi một F # chức năng với một chữ ký 'a ->' b đến một phương pháp C# mà hy vọng Func rồi F # biên dịch tạo ra các lỗi sau:

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

Tôi muốn ở lại với F biểu thứC# lambda nhưng để sử dụng một lớp dịch thuật để có thể gửi chúng dưới dạng C# Func lambda. Điều này có thể đạt được không?

+1

Đối với bất kỳ ai gặp khó khăn trong việc tìm kiếm các phương pháp chuyển đổi trong PowerPack được đề cập ở đây, chúng nằm trong FSharp.PowerPack.Linq, FuncConvertExtensions –

Trả lời

30

F # cung cấp các hàm tạo cho tất cả các loại đại biểu nhận giá trị F # của các loại hàm tương ứng. Ví dụ. trong trường hợp của bạn, bạn muốn sử dụng System.Func<_,_>(fun x -> ...) áp dụng hàm tạo được tạo kiểu ('a -> 'b) -> System.Func<'a, 'b>.

+0

Tất nhiên! Cám ơn vì đã hồi âm nhanh chóng. –

+1

điều này cũng áp dụng cho 'Biểu thức >'? – Maslow

+0

Đôi khi nó trả tiền để đi đến trang thứ ba của kết quả của Google. A ++++ sẽ upvote một lần nữa. –