2011-03-11 8 views
22

मैं जॉन स्कीट के 'सी # इन गहराई, द्वितीय संस्करण' पुस्तक को पढ़ रहा हूं। उन्होंने कहा कि हम दो समाधान का उपयोग कर गतिशील तर्क के साथ विस्तार के तरीकों कॉल कर सकते हैं बस के रूप मेंडायनामिक प्रकार की एक्सटेंशन विधि कैसे कॉल करें?

dynamic size = 5; 
var numbers = Enumerable.Range(10, 10); 
var error = numbers.Take(size); 
var workaround1 = numbers.Take((int) size); 
var workaround2 = Enumerable.Take(numbers, size); 

तो उन्होंने कहा "दोनों दृष्टिकोण यदि आप अंतर्निहित this मूल्य के रूप में एक गतिशील मान के साथ विस्तार विधि कॉल करना चाहते हैं काम करेंगे" । मुझे नहीं पता कि इसे कैसे प्राप्त किया जाए।

बहुत बहुत धन्यवाद।

+11

मैन, अब यह टिकट नहीं है? आपने जॉन स्कीट द्वारा एक पुस्तक पढ़ी है, और जो कुछ आप अस्पष्ट हैं, उसके बारे में जॉन स्कीट से एक जवाब प्राप्त करें। –

+4

क्या हमें एक जोन-स्कीट टैग चाहिए? – Myster

उत्तर

38
इस तरह

:

dynamic numbers = Enumerable.Range(10, 10); 
var firstFive = Enumerable.Take(numbers, 5); 

दूसरे शब्दों में, सिर्फ एक स्थिर पद्धति के रूप में के बजाय का एक विस्तार पद्धति के रूप में कहते हैं।

या अगर आप एक उचित प्रकार तर्क पता है कि तुम बस इसे डाली सकता है, जो मैं एक अतिरिक्त चर के साथ आम तौर पर करते हैं:

dynamic numbers = Enumerable.Range(10, 10); 
var sequence = (IEnumerable<int>) numbers; 
var firstFive = sequence.Take(5); 

... लेकिन अगर आप गतिशील प्रकार के साथ काम कर रहे , आप अनुक्रम तत्व प्रकार को अच्छी तरह से नहीं जानते हैं, इस मामले में पहला संस्करण "निष्पादन समय संकलक" को मूल रूप से समझने देता है।

+1

संभवतः आप कर सकते हैं: ((IENumerable ) संख्याएं)। टेक (5)? – Massif

+1

@ मासिफ़: हाँ, आप भी ऐसा कर सकते हैं। संपादित करेंगे –

3

एक्सटेंशन विधि केवल एक वाक्य रचनात्मक चीनी है, इसे सी # कंपाइलर द्वारा कॉल करने वाली सामान्य विधि के रूप में परिवर्तित किया जाएगा। यह रूपांतरण वर्तमान वाक्यविन्यास संदर्भ के साथ निर्भर है (कथन का उपयोग करके कौन से नेमस्पेस आयात किए जाते हैं)।

गतिशील चर रनटाइम द्वारा प्रक्रिया है। इस बार, सीएलआर को कौन सी विस्तार विधि का उपयोग करने का निर्णय लेने के लिए पर्याप्त वाक्यविन्यास संदर्भ जानकारी नहीं मिल सकती है। तो, यह काम नहीं है।

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