2012-01-13 15 views
12

क्योंकि जब भी मैं दृश्य स्टूडियो में तत्काल खिड़की से एक विस्तार विधि कॉल करने का प्रयास मैं सवाल पूछने से कहा जा सकता है 2010 मैं निम्नलिखित त्रुटि मिलती है:एक्सटेंशन के तरीके तत्काल खिड़की

System.Collections.Generic.IEnumerable' does not contain a definition for 'ToList' and no extension method 'ToList' accepting a first argument of type 'System.Collections.Generic.IEnumerable' could be found (are you missing a using directive or an assembly reference?)

तत्काल खिड़की हैं एक्सटेंशन विधियों का समर्थन नहीं करता है, तो यह क्यों है कि जब मैं अपना चर टाइप करता हूं (टाइप IEnumerable<QueryFilter>) के बाद एक डॉट के बाद, IntelliSense सभी एक्सटेंशन विधियों को सूचीबद्ध करता है?

कमांड विंडो में जो कुछ भी टाइप कर रहा हूं उसके साथ कुछ भी गलत नहीं है क्योंकि अगर मैं इसे अपनी कोड फ़ाइल में कॉपी और पेस्ट करता हूं, तो यह काम करता है।

विजुअल स्टूडियो 2012 के साथ एक ही समाधान के लिए एक ही काम करने के साथ ठीक काम करता है। अगर मैं वापस वीएस -2010 पर स्विच करता हूं और समस्या बनी रहती है।

उत्तर

1

यह व्यवहार Code Contracts के कारण होता है, और यह केवल तत्काल विंडो तक ही सीमित नहीं है बल्कि सशर्त ब्रेकपॉइंट विंडो भी सीमित है।

अद्यतन मार्च 01, 2016: मिले इस MSDN Question क्यों प्रकार संकल्प मेरी घड़ी खिड़कियों में काम नहीं कर रहा पूछ।वर्णित व्यवहार बिल्कुल वही है जैसा कि मुझे तत्काल विंडो का उपयोग करते समय अनुभव होता है। कारण को CodeContracts को भी जिम्मेदार ठहराया गया है और माइक्रोसॉफ्ट कनेक्ट पर एक बग रिपोर्ट दर्ज की गई है। बग हल हो रहा है या नहीं, संकेत नहीं दिया गया है।

+2

क्या आप कुछ स्पष्टीकरण दे सकते हैं क्यों कोड अनुबंध इस समस्या का कारण बनता है? – gabe

+0

कोई स्पष्टीकरण नहीं। एक और मशीन स्थापित करके इसका परीक्षण किया, सत्यापित किया कि यह सही ढंग से काम करता है और फिर कोड अनुबंध स्थापित करता है, जिसके परिणामस्वरूप समस्या आती है। –

+0

यह सिर्फ मेरी सेट-अप नहीं है, मेरे सहयोगी के साथ भी वही बात हो रही है। विजुअल स्टूडियो 2012 में सटीक वही समाधान चला रहा है और तत्काल विंडो में कमांड जारी करने के लिए ठीक काम करता है। VS2010 पर वापस स्विच करें और समस्या बनी रहती है। –

4

एक्सटेंशन विधियां केवल स्थिर तरीके हैं।

आपको उदाहरण का उपयोग करने में सक्षम होना चाहिए System.Linq.Enumerable.ToList()

+0

वोट दिया गया क्योंकि यह सवाल का जवाब नहीं देता है कि क्यों तत्काल विंडो के भीतर से सामान्य धाराप्रवाह नोटेशन का उपयोग करके एक्सटेंशन विधियों को कॉल नहीं किया जा सकता है। – bradgonesurfing

1

विस्तार विधि अनुवाद "Enumerable.ToList" संकलक सामान्य रूप से करने के लिए

myList.Tolist(); 

बदल जाएगा करने के लिए: संकलन समय के दौरान

Enumerable.ToList(myList); 

। मेरा मानना ​​है कि यदि आप चाहें तो आप क्विकवॉच विंडो से एक्सटेंशन विधियों का उपयोग कर सकते हैं।

5

ऐसा इसलिए है क्योंकि System.Linq नामस्थान वर्तमान संदर्भ में आयात नहीं किया गया है जब आप डिबगिंग करते हैं।

अपने कोड में

using System.Linq; 

जोड़ें।

विजुअल स्टूडियो 2010 साथ उदाहरण:

enter image description here

System.LINQ आयातित के साथ पहली बार है, तो using System.LINQ बिना।

संपादित: नाम स्थान आयात किया जाता है और IntelliSense तरीकों प्रदर्शित कर रहा है है, तो यह तत्काल खिड़की से एक बग हो सकता है। this bug entry on connect देखें।

+0

सिस्टम। लिंक्स आयात किया जाता है। –

+0

@ एफ़ेलियन आप गलत हैं, तत्काल विंडो ** निश्चित रूप से एक्सटेंशन एक्सटेंशन विधियों का समर्थन करता है ** (केवल परीक्षण VS2010)। कम से कम मतदान करने से पहले इसका परीक्षण करें -__- – ken2k

+0

@ केन 2k आप सही हैं। मेरी गलती। मैंने डाउनवोट हटा दिया है;) – Aphelion

6

विस्तार विधियां वाक्यविन्यास चीनी हैं। असल में उन्हें staticthis कीवर्ड के साथ लागू किया गया है। आप स्थाई विधि का उपयोग कर किसी भी विस्तार विधि को कॉल कर सकते हैं जो विस्तार विधि प्रदान करता है। फिर आपको उस ऑब्जेक्ट को पास करना चाहिए जिसे पहले पैरामीटर के रूप में विस्तारित किया जा रहा है।

+0

इंटेलिसेन्स एक्सटेंशन विधियों की सूची क्यों देता है, अगर मैं उन्हें उस वाक्यविन्यास का उपयोग करके कॉल करने में असमर्थ हूं? क्या यह विजुअल स्टूडियो में एक बग है? –

+0

वोट दिया गया क्योंकि यह इस सवाल का जवाब नहीं देता है कि तत्काल विंडो के भीतर से सामान्य धाराप्रवाह नोटेशन का उपयोग करके एक्सटेंशन विधियों को क्यों नहीं बुलाया जा सकता है। – bradgonesurfing

+0

@bradgonesurfing व्याख्या करने के लिए धन्यवाद। हालांकि प्राथमिक प्रश्न 'कर' है और 'क्यों नहीं' है। जवाब नहीं है, और मैं एक वर्कअराउंड भी प्रदान करता हूं। दुर्भाग्य से मैं द्वितीयक क्यों सवाल का जवाब नहीं दे सकता। – Aphelion

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