मैं इस तरह एक समारोह है:कैसे अभिव्यक्ति करने के लिए समारोह <T,bool> कन्वर्ट करने के लिए <Func<T,bool>>
Func<MyClass, bool> func = x=>Id == 5;
मैं इसे कैसे करने के लिए परिवर्तित कर सकते हैं:
Expression<Func<MyClass, bool>>
मैं इस तरह एक समारोह है:कैसे अभिव्यक्ति करने के लिए समारोह <T,bool> कन्वर्ट करने के लिए <Func<T,bool>>
Func<MyClass, bool> func = x=>Id == 5;
मैं इसे कैसे करने के लिए परिवर्तित कर सकते हैं:
Expression<Func<MyClass, bool>>
इस प्रयास करें:
Func<MyClass, bool> func = x=>Id == 5;
Expression<Func<MyClass, bool>> expr = mc => func(mc);
यह वास्तव में एक प्रतिनिधि को कॉल करने के लिए 'expr' सेट करता है जो' MyClass' लेता है और 'बूल' देता है। 'expr' वास्तविक lambda के लिए एक वाक्यविन्यास पेड़ नहीं होगा। – Sean
हां, यह है। तो क्या? शायद सवाल का लेखक बस यही होना चाहिए। – Memoizer
इसे उत्तर स्वीकार नहीं किया जाना चाहिए। विधि अभिव्यक्ति में परिवर्तित नहीं किया जाता है। –
आप एक अभिव्यक्ति बना सकते हैं जो आपके द्वारा बनाए गए प्रतिनिधि को कॉल का प्रतिनिधित्व करता है। लेकिन अधिकांश समय, जब आप Expression
एस का उपयोग कर रहे हैं, तो आप यह समझने के लिए करते हैं कि कोड क्या करता है (उदा। इसे SQL में परिवर्तित करने के लिए)। और आप एक अपारदर्शी फ़ंक्शन का आह्वान करने के लिए अभिव्यक्ति के साथ ऐसा नहीं कर सकते हैं।
तुम बस लिख सकते हैं:
Expression<Func<MyClass,bool>> expr = x=>Id == 5;
यह expr
सेट हो जाएगा Id == 5
के लिए एक अभिव्यक्ति पेड़ होने के लिए।
यदि आप कार्य करें:
Func<MyClass, bool> func = x=>Id == 5;
Expression<Func<MyClass, bool>> expr = mc => func(mc);
फिर इस expr
सेट हो जाएगा func
के लिए एक कॉल के लिए एक अभिव्यक्ति पेड़ होने के लिए, func
के शरीर के लिए नहीं एक अभिव्यक्ति पेड़।
अभिव्यक्ति एक लैम्ब्डा फ़ंक्शन का इंटरमीडिएट प्रतिनिधित्व है। Func संकलित lambda समारोह स्वयं है। ऐसा मत सोचो कि आप दोनों के बीच बदल सकते हैं। आपको ऐसा करने की ज़रूरत क्यों है? – akhisp