के बीच अंतर अभिव्यक्ति और Func के बीच क्या अंतर है? एक ही कार्य दोनों द्वारा प्राप्त किया जा सकता है। तो अंतर क्या है?अभिव्यक्ति और Func
उत्तर
Expression treesडेटा तर्क के प्रतिनिधित्व - जिसका अर्थ है कि उन्हें LINQ प्रदाताओं जैसी चीजों द्वारा निष्पादन समय पर जांच की जा सकती है। वे कोड का अर्थ क्या कर सकते हैं, और संभवतः इसे किसी अन्य रूप में परिवर्तित कर सकते हैं, जैसे SQL।
Func
प्रकार के परिवार, हालांकि, केवल प्रतिनिधि हैं। वे सामान्य आईएल के रूप में समाप्त होते हैं, जिन्हें सीधे निष्पादित किया जा सकता है, लेकिन (आसानी से) जांच नहीं की जाती है। ध्यान दें कि आप अभिव्यक्ति पेड़ों (अच्छी तरह से, Expression<T>
और LambdaExpression
) प्रतिनिधियों में संकलित कर सकते हैं और यदि आपको आवश्यकता हो तो प्रबंधित कोड के भीतर भी निष्पादित कर सकते हैं।
आप अभिव्यक्ति पेड़ मैन्युअल अभिव्यक्ति कक्षा में कारखाना तरीकों का उपयोग कर का निर्माण कर सकते हैं, लेकिन आम तौर पर आप सिर्फ तथ्य यह है कि सी # में बदल सकते हैं लैम्ब्डा दोनों अभिव्यक्ति के पेड़ और सामान्य प्रतिनिधियों में भाव का उपयोग करें:
Expression<Func<int, int>> square = x => x * x;
Func<int, int> square = x => x * x;
ध्यान दें कि ऐसी सीमाएं हैं जिन पर लैम्ब्डा अभिव्यक्ति अभिव्यक्ति पेड़ों में परिवर्तित की जा सकती है। सबसे महत्वपूर्ण बात, केवल एक ही अभिव्यक्ति (बजाय एक बयान शरीर) से मिलकर lambdas परिवर्तित किया जा सकता:
// Compile-time error
Expression<Func<int, int>> square = x => { return x * x; };
// Works fine
Func<int, int> square = x => { return x * x; };
अभिव्यक्ति रनटाइम पर बनाया जा सकता है, फ़ंक्शन नहीं (जब तक कि आप प्रतिबिंब उत्सर्जित न करें)। एक बार जब आप अभिव्यक्ति वृक्ष बनाते हैं तो आप इसे संकलित कर सकते हैं और इसे फ़ंक्शन पॉइंटर में बदल सकते हैं जिसे बुलाया जा सकता है। Func कुछ पहले से मौजूद फ़ंक्शन के लिए एक सूचक है जिसे अब संशोधित नहीं किया जा सकता है जबकि अभिव्यक्ति कुछ फ़ंक्शन के कोड का प्रतिनिधित्व करती है जो तब तक मौजूद नहीं है जब तक आप इसे संकलित नहीं करते।
आप आमतौर पर एक्सप्रेशन का उपयोग कर जब आप अर्थ विज्ञान कोड की सुरक्षित रखना चाहते हैं ताकि आप यह अनुवाद कर सकते हैं। यही है, अभिव्यक्ति आपको कोड के रूप में कोड का इलाज करने की अनुमति देती है। यदि कोड को डेटा के रूप में नहीं माना जाना चाहिए (यानी आप इसे संग्रहीत करने या अनुवाद करने की योजना नहीं बना रहे हैं) तो एक Func का उपयोग करना उचित है।
यह सच नहीं है कि "वे एक ही बात करते हैं"। Expression
आपके इरादे का वर्णन इस तरीके से करता है जिसे रनटाइम पर व्याख्या किया जा सकता है - यदि आपको नुस्खा पसंद है, तो यह है। एक समारोह एक अपारदर्शी प्रतिनिधि है, का निरीक्षण नहीं किया जा सकता है - इसका उपयोग ब्लैक बॉक्स के रूप में किया जा सकता है। एक नुस्खा की तुलना में, यह किसी प्रकार का ऑटो-शेफ है जो आपको यह देखने नहीं देता है कि यह क्या करता है: इसे कुछ रोटी और कुछ चिकन दें, अपनी आंखें बंद करें और यह आपको एक सैंडविच देता है, लेकिन आपको कभी भी पता नहीं होता।
मैं यहाँ इस अधिक पर चर्चा: Explaining Expression, लेकिन नुस्खा होने, यदि आप नुस्खा आप Expression.Compile()
के माध्यम से अपने खुद के महाराज कर सकते हैं, है LINQ, RPC, आदि के लिए और निश्चित रूप से महत्वपूर्ण है।
- 1. अभिव्यक्ति बनाम Func तर्क
- 2. अभिव्यक्ति <Func<T,bool>> अभिव्यक्ति से <Func<T>>
- 3. Func
- 4. Func
- 5. एक अभिव्यक्ति <Func<,>> प्रतिबिंब
- 6. अभिव्यक्ति <Func<T,bool>> जेनेरिक विधि
- 7. गैर स्थैतिक अभिव्यक्ति <Func<X>> 'इस'
- 8. गतिशील अभिव्यक्ति बनाना <Func<T,Y>>
- 9. कार्य.रुन और Func <>
- 10. एक और अभिव्यक्ति
- 11. अभिव्यक्ति पेड़ों और एक प्रतिनिधि
- 12. सी में: func (शून्य) बनाम func()
- 13. स्थानीय चर और अभिव्यक्ति पेड़
- 14. मैं गतिशील रूप से अभिव्यक्ति कैसे बना सकता हूं <Func <MyClass, bool >> अभिव्यक्ति से भविष्यवाणी <Func <MyClass, string >>?
- 15. सी # एक अभिव्यक्ति <Func <SomeType>> को अभिव्यक्ति में कैसे परिवर्तित करें <Func <OtherType>>
- 16. सी # लैम्ब्डा अभिव्यक्ति और आलसी मूल्यांकन
- 17. शब्दकोश Func के साथ कुंजी
- 18. onclick = "func()" या .click()?
- 19. जीएनयू emacs func-menu
- 20. jQuery में, $ (func) $ (दस्तावेज़) के बराबर है .ready (func)?
- 21. Func <> और अभिव्यक्ति <Func<>> परिवर्तनीय क्यों हैं? मेरे मामले में कोई काम क्यों करता है?
- 22. कहाँ अभिव्यक्ति
- 23. अभिव्यक्ति <Func <TModel, string >> अभिव्यक्ति के लिए <क्रिया <TModel>> "गेटर" "सेटर"
- 24. सी #: 'लैम्ब्डा अभिव्यक्ति' और 'लैम्ब्डा अभिव्यक्ति' के बीच कोई अंतर्निहित रूपांतरण नहीं है?
- 25. लैम्ब्डा अभिव्यक्ति
- 26. मौजूदा अभिव्यक्ति से नया अभिव्यक्ति बनाएं
- 27. लैम्बडा अभिव्यक्ति
- 28. नियमित अभिव्यक्ति समारोह नाम और अजगर
- 29. अभिव्यक्ति से वास्तविक वापसी प्रकार प्राप्त करें <Func <T, object>> उदाहरण
- 30. Moq.Mock <अभिव्यक्ति <Func<T,bool> >>() - Moq