c# - Practical implications of using Expression in methods with delegates -


Linq.Expression & lt; T & gt; प्रकारों का उपयोग कर हम बाद में मूल्यांकन के लिए प्रोग्राम को एएसटी परिभाषित कर सकते हैं और / या निष्पादन।

लेकिन व्यावहारिक रूप में, इस तरह से विधि हस्ताक्षर को परिभाषित करने का क्या असर है:

  सार्वजनिक शून्य someMethod1 (फ़नक & lt; bool & gt; func) {.. ।} // 1. के बजाय  
  सार्वजनिक शून्य someMethod2 (अभिव्यक्ति & lt; फ़नक & lt; bool & gt; & gt; expr) {...} // 2.   

स्पष्ट रूप से जिस तरह से हम Func & lt; bool & gt; से परिणाम प्राप्त करते हैं से भिन्न होता है:

  var परिणाम = func ( ); // 1.   

से

  var func = expr.Compile () // 2. var परिणाम = func ();   

कच्चे व्यावहारिक स्तर पर भी आमंत्रण समान है:

  someMethod1 ((=) = & gt; सत्य); // A. SomeMethod1 (() = & gt; AMethodReturnsABool ()); // बी। SomeMethod1 (एमेन्थ्रेट्सअबल); // सी।   

अंतर के साथ कि संकलित स्तर पर SomeMethod2 विधि समूह वाक्यविन्यास स्वीकार नहीं करता है: <पूर्व> // SomeMethod2 (AMethodReturnsABool); // - & gt;

जब मुझे मानक प्रतिनिधियों क्रिया & lt; T, ... & gt; या Func & lt; T, के साथ एक हस्ताक्षर को परिभाषित करने की आवश्यकता है। ।

आसान यदि आपको अपने लिनक्स अभिव्यक्ति के एएसटी तक पहुँच की आवश्यकता नहीं है, तो संकलित (अज्ञात प्रतिनिधि) संस्करण का उपयोग करें।

ऐसे मामलों जो मैं सोचता हूं कि आपको एएसटी तक पहुंच की आवश्यकता हो सकती है:

  • कुछ अन्य में एएसटी को ट्रांसफ़ॉर्म करना, जैसे एसक्यूएल की तरह।
  • लिखित कोड के कुछ गुणों का विश्लेषण करें।
  • एक प्रतिनिधि बनाएं उदाहरण के लिए, अभिव्यक्ति & lt; T & gt; कुछ उपयोगकर्ता इनपुट के बाहर वस्तुओं यह अपने आईएल अनुवादक के साथ अपने स्वयं के एएसटी लिखने की परेशानी को बचा सकता है।
  • एक ही LINQToSQL या समान LINQ क्वेरी विनिर्देशों के साथ एक सरल इन-मेमोरी सूची का उपयोग करने में सक्षम होने के लिए अपने डेटा एक्सेस परत को खिसकाना।

    संक्षेप में, अगर आपको अभिव्यक्ति & lt; T & gt; की आवश्यकता नहीं है, अभिव्यक्ति & lt; T & gt;। का प्रयोग न करें।

Comments

Popular posts from this blog

excel vba - How to delete Solver(SOLVER.XLAM) code -

github - Teamcity & Git - PR merge builds - anyway to get HEAD commit hash? -

ios - Replace text in UITextView run slowly -