क्या अभिव्यक्ति वृक्ष पर संकलन() को कॉल करते समय आईएल कोड उत्पन्न करना संभव है? इस बहुत ही सरल उदाहरण पर विचार करें:संकलित अभिव्यक्ति से उत्पन्न आईएल कोड को देखकर
class Program
{
public int Value { get; set; }
static void Main(string[] args)
{
var param = Expression.Parameter(typeof(Program));
var con = Expression.Constant(5);
var prop = Expression.Property(param, typeof(Program).GetProperty("Value"));
var assign = Expression.Assign(prop, con);
Action<Program> lambda = Expression.Lambda<Action<Program>>(assign, param).Compile();
Program p = new Program();
lambda(p);
//p.Value = 5;
}
}
अब, अभिव्यक्ति पेड़ क्या करता है Main
की अंतिम पंक्ति कहते हैं। एप्लिकेशन संकलित करें, फिर इसे परावर्तक में खोलें। आप आईएल कोड p.Value = 5;
देख सकते हैं जो असाइनमेंट करता है। लेकिन अभिव्यक्ति पेड़ को रनटाइम पर बनाया और संकलित किया गया था। क्या संकलन से परिणामस्वरूप आईएल कोड देखना संभव है?
तुम सिर्फ तुम * क्या कर रहे हैं * (अर्थात एक संपत्ति की स्थापना) के लिए आईएल * बराबर * करना चाहते हैं? या क्या 'अभिव्यक्ति' आउटपुट के बारे में कुछ है जिसे आप विशेष रूप से रुचि रखते हैं? –
कुछ भी विशिष्ट नहीं है। मुझे समय-समय पर आईएल कोड देखना पसंद है। लेकिन अभिव्यक्तियों के साथ आप एक विधि बना सकते हैं जिसे संकलित असेंबली में कोई आईएल नहीं मिलता है। आईएल * उस * अभिव्यक्ति वृक्ष को बनाने के लिए प्रयोग किया जाता था, लेकिन अभिव्यक्ति वृक्ष के संकलन का नतीजा नहीं था। क्या इसका कोई मतलब है? यह केवल एक जिज्ञासा है और मैं देख सकता हूं कि किसी भी वास्तविक व्यावहारिक उद्देश्य की सेवा नहीं करता है। – Amy
क्या आपने महान ** लिंककैड ** टूल के साथ प्रयास किया है? http://www.linqpad.net/ इसके साथ आप जेनरेट कोड को एमएसआईएल के रूप में प्रदर्शित कर सकते हैं और लगभग कुछ भी प्रयोग कर सकते हैं ... – AFract