2011-06-08 13 views
6

मैं इस बारे में सोच रहा हूं कि अधिक लम्बास जैसे अभिव्यक्ति के पेड़ को कैसे नीचे बनाया गया है, अकेले कुछ ऐसा हो जो कई कथन हो। उदाहरण के लिए:बिल्डिंग एक्सप्रेशन पेड़

Func<double?, byte[]> GetBytes 
     = x => x.HasValue ? BitConverter.GetBytes(x.Value) : new byte[1] { 0xFF }; 

मैं किसी भी विचार की सराहना करता हूं।

उत्तर

5

मैं list of methods on the Expression class के माध्यम से पढ़ने का सुझाव दूंगा, आपके सभी विकल्प वहां सूचीबद्ध हैं, और Expression Trees Programming Guide

इस विशेष उदाहरण के लिए के रूप में:

/* build our parameters */ 
var pX = Expression.Parameter(typeof(double?)); 

/* build the body */ 
var body = Expression.Condition(
    /* condition */ 
    Expression.Property(pX, "HasValue"), 
    /* if-true */ 
    Expression.Call(typeof(BitConverter), 
        "GetBytes", 
        null, /* no generic type arguments */ 
        Expression.Member(pX, "Value")), 
    /* if-false */ 
    Expression.Constant(new byte[] { 0xFF }) 
); 

/* build the method */ 
var lambda = Expression.Lambda<Func<double?,byte[]>>(body, pX); 

Func<double?,byte[]> compiled = lambda.Compile(); 
+0

बहुत स्पष्ट प्रतिक्रिया के लिए धन्यवाद ... मैं कुछ समय के लिए इस बारे में पढ रहा हूं और हलकों में चारों ओर जा रहा लग रहा था और वहाँ हमेशा टुकड़े गायब हो लग रहा था ... –

+0

छोटा नोट: अभिव्यक्ति। मेम्बर (...) मेरे पर्यावरण में मौजूद नहीं था, इसलिए इसे अभिव्यक्ति में बदलने की आवश्यकता थी। प्रॉपर्टी (...) –

+0

@ क्रेग: आप सही हैं, मेरा मतलब संपत्ति भी है। – user7116

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