2011-02-07 13 views
7

को डंप बयान लैम्ब्डा शरीर निम्नलिखित बयान लैम्ब्डा उदाहरण को देखते हुए:नेट - स्ट्रिंग

var fMyAction = new Action(() => 
{ 
    x += 2; 
    something = what + ever; 
}); 

क्या संभव तरीके कि लैम्ब्डा के शरीर मिलता है और स्ट्रिंग के लिए यह डंप करने के लिए कर रहे हैं? (कुछ ऐसा जो अंततः इस प्रकार की Action कक्षा के लिए एक एक्सटेंशन विधि लिखने की अनुमति देगा: fMyAction.Dump() जो "x += 2; something = what + ever;" वापस करेगा)।

धन्यवाद

+0

पर यह देखने के लिए क्या है? कृपया अपने प्रश्न पर अधिक पृष्ठभूमि दें, शायद एक पूरी तरह से अलग समाधान है। जो आप अभी करने की कोशिश कर रहे हैं वह लगभग असंभव है और सी-तेज में कोई समझ नहीं आता है। –

+1

@ एसके-तर्क: यह निश्चित रूप से अमूर्त स्तर पर अपने स्वयं के कारणों पर चर्चा करने के लिए इस विशिष्ट पोस्ट के दायरे से बाहर होगा। –

+0

आपको कम से कम समझाए बिना उपयोगी उत्तर नहीं मिलेगा, आपको स्ट्रिंग प्रस्तुति की आवश्यकता क्यों है, यह स्ट्रिंग मूल स्रोत के लिए कितनी करीब होनी चाहिए, और आपकी प्रदर्शन आवश्यकताओं क्या हैं। अपघटन के अलावा कई विकल्प उपलब्ध हैं। –

उत्तर

11

यह उस रूप में संभव नहीं है। आपका lamda बाइट कोड के लिए संकलित हो जाता है। सिद्धांत रूप में बाइट-कोड को डीकंपाइल करना संभव है, जैसे परावर्तक करता है, यह मुश्किल है, त्रुटि प्रवण है और आपको संकलित सटीक कोड नहीं देता है, लेकिन केवल समतुल्य कोड है।

यदि आप Action के बजाय use an Expression<Action> हैं तो आपको लामा का वर्णन करने वाला अभिव्यक्ति वृक्ष मिलता है। और अभिव्यक्ति वृक्ष को एक स्ट्रिंग में परिवर्तित करना संभव है (और मौजूदा पुस्तकालय हैं जो इसे करते हैं)।

लेकिन यह आपके उदाहरण में संभव नहीं है क्योंकि यह एक बहु स्टेटमेंट lamda है। और केवल सरल lamdas स्वचालित रूप से एक अभिव्यक्ति पेड़ में परिवर्तित किया जा सकता है।

+0

आप सही हैं ... मुझे यह मिला और शैंपेन खोलने के लिए तैयार था: http://code.msdn.microsoft.com/exprserialization अचानक अचानक: http://msdn.microsoft.com/en-us/ पुस्तकालय/bb397745.aspx –

0

ट्यूटोरियल यहाँ के माध्यम से पढ़ें, आगंतुक पैटर्न के लिए

http://blogs.msdn.com/b/mattwar/archive/2007/07/30/linq-building-an-iqueryable-provider-part-i.aspx

वेतन ध्यान वह किसी दिए गए अभिव्यक्ति पेड़ चलने के लिए उपयोग करता है। आपको अपनी जरूरतों को पूरा करने के लिए इसे आसानी से बदलने में सक्षम होना चाहिए।