2009-09-15 14 views
9

अभिव्यक्ति <> सी # में उपयोग किया गया है वास्तव में क्या है? क्या कोई परिदृश्य है जहां आप अभिव्यक्ति <> ऑब्जेक्ट को ऑब्जेक्ट के रूप में तुरंत चालू करेंगे? यदि हां, तो कृपया एक उदाहरण दें!सी # .NET 3.5: अभिव्यक्ति क्या है <> के लिए उपयोग किया जाता है?

धन्यवाद!

उत्तर

7

Expression<T> लगभग पूरी तरह से LINQ के लिए उपयोग किया जाता है, लेकिन यह होने के लिए नहीं है। LINQ के भीतर, आमतौर पर कोड में व्यक्त तर्क को "कैप्चर" करने के लिए उपयोग किया जाता है, लेकिन इसे डेटा में रखें। उस डेटा को तब LINQ प्रदाता द्वारा जांच की जा सकती है और उचित तरीके से संभाला जा सकता है - उदा। इसे एसक्यूएल में परिवर्तित करके। आमतौर पर LINQ में अभिव्यक्ति पेड़ लैम्ब्डा अभिव्यक्ति या क्वेरी भाव से संकलक द्वारा बनाई गई हैं - लेकिन अन्य मामलों में यह सीधे अपने आप एपीआई का उपयोग करने में आसान हो सकता है।

अन्य स्थानों के कुछ उदाहरण मैं इसे इस्तेमाल किया है और यह प्रयोग किया जाता देखा है:

  • MiscUtil में, मार्क Gravell यह प्रयोग किया जाता "सामान्य अंकगणित" लागू करने के लिए - अगर एक प्रकार प्रासंगिक ऑपरेटर है, यह कर सकते हैं सामान्य रूप से इस्तेमाल किया जाना चाहिए।
  • UnconstrainedMelody में मैं एक समान तरीके से यह प्रयोग किया जाता परिचालन (विभिन्न श्रेणियों जो जटिल की तुलना में आप उम्मीद कर सकते है, long और ulong होने के कारण) उनके अंतर्निहित प्रकार के, झंडे enums पर प्रदर्शन करने के लिए भले ही
  • Visual LINQ में मैं क्वेरी इस्तेमाल किया LINQ को "एनिमेट" करने के लिए अभिव्यक्तियां, ताकि आप देख सकें कि क्या हो रहा है। जबकि स्पष्ट रूप से यह एक LINQ उपयोग है, यह तर्क को दूसरे रूप में अनुवाद करने का पारंपरिक रूप नहीं है।
+0

मैं 'विजुअललाइन' कहां देख सकता हूं? – flesh

+0

ओह, ब्लॉग पोस्ट के लिए एक लिंक शामिल करना था। रुको ... –

0

my answer to another SO question में कोड के बाद & पर मेरे पहले एक नज़र डालें।

सारांश: Expression<> कोड को बहुत सरल बना दिया, इसे समझना आसान बना दिया, और यहां तक ​​कि एक प्रेत बग भी तय किया।

4

LINQ के संदर्भ में, ऐसी चीजें हैं जो आप रनटाइम पर अधिक बहुमुखी LINQ क्वेरी बनाने के लिए कर सकते हैं, जो आप पूरी तरह से लैम्बडास में कर सकते हैं।

मैंने DynamicMethod और आईएल के विकल्प के रूप में माइक्रो-कंपाइलर के रूप में कई बार उपयोग किया है। यह दृष्टिकोण .NET 4.0 (as discussed on InfoQ) में मजबूत हो जाता है, लेकिन 3.5 में भी बहुत सारी चीजें आप कर सकते हैं देखते हैं (आम तौर पर क्रम डेटा के आधार पर, विन्यास आदि):

मैं भी कुछ wo के लिए एक गणित इंजन के हिस्से के रूप में इसका इस्तेमाल किया rk मैं माइक्रोसॉफ्ट के साथ किया था - यानी एक Expression पेड़ में एक गणित अभिव्यक्ति (आदि "* y = z (x + 12)") को पार्स यह संकलन और इसे चलाने के।

एक और intersting उपयोग (जेसन बोक, here द्वारा सचित्र) आनुवंशिक प्रोग्रामिंग में है; Expression पेड़ के रूप में अपने उम्मीदवारों का निर्माण, और आप उन्हें जल्दी से निष्पादित करने के लिए (Compile() के बाद) के लिए आवश्यक कोड है, लेकिन महत्वपूर्ण बात (आनुवंशिक प्रोग्रामिंग के लिए), यह भी चारों ओर टुकड़े स्वैप करने के लिए।

+0

क्या कहीं भी हम माइक्रोसॉफ्ट के लिए किए गए कोड को देख सकते हैं? मैं वास्तव में इस तरह की चीज़ों के कुछ उदाहरण देखना चाहता हूं .. – flesh

+0

मेरे पास एक प्रति है, लेकिन मुझे नहीं लगता कि इसे "जैसा है" पोस्ट करना बुद्धिमान होगा (यह मेरे नियोक्ता और माइक्रोसॉफ्ट द्वारा संयुक्त स्वामित्व है)। मैं शुरुआत से फिर से करने के लिए समय खोजने का प्रयास करूंगा - यह बहुत कुछ नहीं है, मैंने माइक्रोसॉफ्ट के रीडिंग मुख्यालय के रास्ते पर ट्रेन पर मूल लिखा; -पी –

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