2010-08-02 14 views
23

एफ # पावरपैक के बीच इंटरऑप Func < ...> F # फ़ंक्शंस, या तो मानक या tupled वाले से अनुवाद करने के लिए रूपांतरण विधियों के एक सेट के साथ आता है। लेकिन क्या यह विपरीत प्राप्त करना संभव है: यदि आप एफ # कोड से एक सी # विधि से कॉल करना चाहते हैं जो Func < ...> लेता है और मूल F # lambda अभिव्यक्ति का उपयोग करना चाहता है (उदा। मज़ा x -> some_function_of (x))?एफ # और सी # लैम्बडास

अगर मैं एक हस्ताक्षर के साथ एक एफ # समारोह भेजें 'एक ->' ख एक सी # विधि है कि उम्मीद है Func तो एफ # संकलक निम्न त्रुटि उत्पन्न करने के लिए:

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

मैं एफ # लैम्ब्डा भाव के साथ रहना चाहते हैं, लेकिन सी # Func lambda के रूप में भेजने में सक्षम होने के लिए एक अनुवाद परत का उपयोग करने के लिए। क्या यह प्राप्त करने योग्य है?

+1

किसी भी व्यक्ति को यहां पावरपैक में रूपांतरण विधियों को खोजने में परेशानी हो रही है, तो वे FSharp.PowerPack.Linq में हैं, FuncConvertExtensions –

उत्तर

30

एफ # सभी प्रतिनिधि प्रकारों के लिए निर्माता प्रदान करता है जो संबंधित फ़ंक्शन प्रकारों के F # मान लेते हैं। जैसे आपके मामले में आप System.Func<_,_>(fun x -> ...) का उपयोग करना चाहते हैं जो ('a -> 'b) -> System.Func<'a, 'b> प्रकार के जेनरेट कन्स्ट्रक्टर को लागू करता है।

+0

बेशक! त्वरित उत्तर के लिए धन्यवाद। –

+1

क्या यह 'अभिव्यक्ति >' पर भी लागू होता है? – Maslow

+0

कभी-कभी यह Google परिणामों के तीसरे पृष्ठ पर जाने का भुगतान करता है। एक ++++ फिर से ऊपर जाएगा। –

संबंधित मुद्दे