c# - Given a Member Access lambda expression, convert it to a specific string representation with full access path -
एक
अभिव्यक्ति & lt; Func & lt; T, ऑब्जेक्ट & gt; & gt;
(जैसे x => x.Prop1.SubProp), मैं एक स्ट्रिंग "Prop1.SubProp" बनाना चाहता हूं जितना गहन आवश्यक है।
इस मामले में एक एकल पहुंच (जैसे x => x.Prop1), मैं आसानी से इस के साथ कर सकता हूँ:
सदस्य अभिव्यक्ति शरीर = (अभिव्यक्ति.बीडी। नोडप्रकार == अभिव्यक्ति टाइप करें। कनवर्ट)? (सदस्य अभिप्राय) ((UnaryExpression) अभिव्यक्ति। बॉडी) .अफ़र: (सदस्य अभिप्राय) अभिव्यक्ति। बॉडी; रिटर्न बॉडी.मंबर .नाम;
हालांकि, अगर गहरी घोंसले के शिकार हैं, उदा। X => x.Prop1.SubProp1, यह केवल सबसे गहरा नेस्टेड नाम मिलता है, उदा। "प्रस्तुतिकरण 1 एसबप्रॉप 1" के बजाय "उपप्रॉप 1"
क्या लैम्ब्डा अभिव्यक्ति की पूरी संपत्ति पथ तक पहुंचने के लिए कोई रास्ता नहीं है?
सार्वजनिक स्ट्रिंग GetPath & lt; T & gt; (अभिव्यक्ति & lt; Func & lt; T, ऑब्जेक्ट & gt; & gt; expr) {var stack = new stack & lt; string & gt; (); सदस्य स्विच (expr.Body.NodeType) {मामला अभिव्यक्ति प्रकार। कनवर्ट: केस अभिव्यक्ति प्रकार। कनवर्ट चेक: var ue = expr.Body UnaryExpression के रूप में; मुझे = ((ue! = नल)? Ue.Operand: null) सदस्य अभिव्यक्ति के रूप में; टूटना; डिफ़ॉल्ट: me = expr.Body सदस्य के रूप में अभिव्यक्ति; टूटना; } जबकि (मुझे! = नल) {stack.Push (me.Member.Name); मुझे = me.Expression सदस्य के रूप में अभिव्यक्ति; } वापसी स्ट्रिंग.जोइंड ("।", स्टैक। टू ऐरे ()); }
Comments
Post a Comment