मैं एक अभिव्यक्ति वृक्ष पार्स कर रहा हूं। ExpressionType.MemberAccess के एक नोड टाइप को देखते हुए, मुझे उस फ़ील्ड का मूल्य कैसे प्राप्त होगा?एक प्रकार दिया गया ExpressionType.MemberAccess, मैं फ़ील्ड मान कैसे प्राप्त करूं?
सी # एमएसडीएन दस्तावेज़ों से: सदस्य पहुंच एक नोड है जो किसी क्षेत्र या संपत्ति से पढ़ने का प्रतिनिधित्व करता है।
एक कोड स्निपेट अविश्वसनीय रूप से अविश्वसनीय रूप से सहायक होगा। अग्रिम में धन्यवाद!!!
मेरे कोड इस तरह दिखता है:
public static List<T> Filter(Expression<Func<T, bool>> filterExp)
{
//the expression is indeed a binary expression in this case
BinaryExpression expBody = filterExp.Body as BinaryExpression;
if (expBody.Left.NodeType == ExpressionType.MemberAccess)
//do something with ((MemberExpressionexpBody.Left).Name
//right hand side is indeed member access. in fact, the value comes from //aspdroplist.selectedvalue
if (expBody.Right.NodeType == ExpressionType.MemberAccess)
{
//how do i get the value of aspdroplist.selected value?? note: it's non-static
}
//return a list
}
आपको बहुत धन्यवाद मार्क। .xpression संपत्ति का यह मूल्य है ... कुछ और दिलचस्प: \t {मान (ASP.usercontrols_mycontro_ascx) .controlname} –
मैं जेनेरिक और प्रतिबिंब के साथ बहुत कुछ कर रहा हूं इसलिए propertyinfo/fieldinfo के माध्यम से मूल्य पुनर्प्राप्त करना काम नहीं कर रहा है क्योंकि मैं मुझे यकीन नहीं है कि संदर्भ वस्तु को कहां से खींचें ... क्या मैं इसे memberexpression या methodinfo से खींच सकता हूं? –
यह काम करेगा ... लेकिन समस्या यह है कि आपको मूल्यांकन करने की आवश्यकता है।FieldInfo/PropertyInfo के लिए "obj" के रूप में फ़ीड करने के लिए मूल्य के रूप में अभिव्यक्ति। क्या आप सिर्फ कॉम्पाइल() का उपयोग नहीं कर सकते हैं और लैम्ब्डा को प्रतिनिधि के रूप में निष्पादित कर सकते हैं? पार्सिंग से बहुत आसान ... –