मैं सी # में अभिव्यक्ति पेड़ सीख रहा हूं।स्थानीय चर और अभिव्यक्ति पेड़
मैं थोड़ी देर के लिए अब अटक कर रहा हूँ:
string filterString = "ruby";
Expression<Func<string, bool>> expression = x => x == filterString;
मैं कोड द्वारा इस अभिव्यक्ति कैसे निर्माण कर सकते हैं? स्थानीय चर को कैप्चर करने का कोई नमूना नहीं है। यह एक आसान है:
Expression<Func<string, bool>> expression = x => x == "ruby";
यह होगा:
ParameterExpression stringParam = Expression.Parameter(typeof(string), "x");
Expression constant = Expression.Constant("ruby");
BinaryExpression equals = Expression.Equal(stringParam, constant);
Expression<Func<string, bool>> lambda1 =
Expression.Lambda<Func<string, bool>>(
equals,
new ParameterExpression[] { stringParam });
डिबगर प्रिंट के लिए (x => x == filterString) निम्नलिखित:
{x => (एक्स == मूल्य (Predicate.Program + <> c__DisplayClass3) .filterString)}
इस विषय पर कुछ प्रकाश डालने के लिए धन्यवाद।
धन्यवाद। उत्पन्न एमएसआईएल कोड को देखने का संकेत बहुत उपयोगी है। – yonexbat
कुछ 'var hoistedConstant = Expression.Property (Expression.Constant (new {value = filterString}), "Value") की तरह कुछ; ' – Appetere
@Appetere' Expression.Constant (filterString) 'के बारे में क्या करना चाहिए? माना जाता है कि यह चर में परिवर्तन को प्रतिबिंबित नहीं करेगा, लेकिन न ही आपका सुझाव होगा। –