2010-04-09 21 views
5

वे आमतौर पर जेनेरिक शामिल होते हैं। लेकिन जेनेरिक के साथ कुछ तरीकों में उन्हें नहीं है, और सभी एक्सटेंशन विधियों में उन्हें नहीं है।Intellisense में LINQ विधियों पर कोण ब्रैकेट का क्या अर्थ है? (<>, गणना <>, अलग <>, आदि)

वे पहले दिन से ही "वहां रहे हैं", हम सभी ने उन्हें देखा है; लेकिन मुझे एहसास हुआ कि मुझे अभी भी पता नहीं है कि उनका क्या मतलब है, और मुझे कहीं भी जवाब नहीं मिल रहा है। अब यह वास्तव में मुझे परेशान कर रहा है। Google केवल एक्सएमएल, आदि के बारे में परिणाम बदलता है

क्या यह आधिकारिक तौर पर कहीं भी दस्तावेज है? धन्यवाद।

संपादित करें: ठीक है कि यह बहुत अच्छा है। चूंकि मैंने इस जलते हुए प्रश्न का उत्तर पाने के लिए अपना पहला स्टैक ओवरफ़्लो पोस्ट बनाने के लिए अभी एक खाता बनाया है; मुझे अपनी सुंदर इंटेलिजेंस तस्वीर पोस्ट करने की अनुमति नहीं है, या एक नया टैग "कोण-ब्रैकेट" बनाएं। मुझे स्टैक ओवरफ्लो पसंद है, लेकिन ... क्या स्वागत है!

शायद मेरी समस्या यह है कि उन्हें वास्तव में "कोण ब्रैकेट" नहीं कहा जाता है ... ??

वैसे भी, मुझे लगता है कि यदि आप वास्तव में मेरी सुंदर स्क्रीनशॉट देखना चाहते हैं तो आप मैन्युअल करने के लिए जा सकते हैं:

Distinct>< http://www.freeimagehosting.net/uploads/6a6c2f3268.png

मुझे बम्प अप तो मैं पोस्ट में शामिल कर सकते हैं कृपया, धन्यवाद। ;)

+0

रीशेर्पर उन्हें छुपाता है ... जब आप इसे इंस्टॉल करते हैं, तो आप 'विकल्प -> इंटेलिसेन्स -> सामान्य' प्राप्त कर सकते हैं और रीशेर्पर के स्वयं के इंटेलिजेंस या वीएस – tanascius

+0

में से एक को उत्तर और वोट के लिए धन्यवाद। मैं जेनेरिक जानता हूं, लेकिन कोण ब्रैकेट के विशिष्ट पदनाम (इंटेलिसेंस में) के बारे में निश्चित नहीं था। मुझे लगता है कि मेरा भ्रम कुछ संस्करणों के लिए दो संस्करण देख रहा था: नया int [] {1, 2} .Sum ... एक (सामान्य कोण पर एक एक्सटेंशन विधि के लिए कोण कोण के बिना), और एक (कोण के साथ) ब्रैकेट्स) एक सामान्य वर्ग पर * सामान्य * विस्तार विधि के लिए! मैं स्पष्टीकरण और पुष्टि की सराहना करता हूं। –

+0

वैसे, क्या किसी के पास इंटेलिजेंस में विशेष रूप से उस चिह्न के लिए एमएसडीएन या अन्य लिंक टाइपिंग जेनेरिक तरीके हैं? ऐसा नहीं है कि मैं आपको विश्वास नहीं करता ... यह सिर्फ अजीब बात है कि मुझे कुछ भी नहीं मिला *। –

उत्तर

8

इन विधियों सामान्य हैं।

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

उदाहरण के लिए, यदि आप एक IEnumerable<int> myNumbers है, निम्नलिखित चार बयान के बराबर हैं:

myNumbers.Count(); 
myNumbers.Count<int>(); 
Enumerable.Count(myNumbers); 
Enumerable.Count<int>(myNumbers); 

पहली और तीसरी कॉल में, संकलक int पैरामीटर infers क्योंकि myNumbers एक IEnumerable<int> है।

Count विस्तार विधि इस तरह (System.Core.Dll में) घोषित किया जाता है:

public static int Count<TSource>(this IEnumerable<TSource> source); 
+1

अच्छा स्पष्टीकरण, धन्यवाद! –

2

वे जेनरिक के लिए कर रहे हैं। जब आप उन फ़ंक्शंस का उपयोग करते हैं जिन्हें आपको हमेशा नहीं रखना पड़ता है क्योंकि कई मामलों में संकलक इसे संदर्भ द्वारा समझ सकता है।

1

वे generic method signatures. हैं I सुझाव देंगे कि आप उन पर सीखें।

जेनरिक के बारे में नोट करने के लिए कुछ दिलचस्प बातें: सबसे पहले, वे संकलन के बाद सामान्य नहीं हैं। आपके ऐप को चलाने से पहले सभी प्रकार का हल हो जाता है और पत्थर में सेट किया जाता है। दूसरा, कंपाइलर अक्सर यह समझ सकता है कि आपका क्या मतलब है, इसलिए आपको इसके बारे में स्पष्ट नहीं होना चाहिए। उदाहरण के लिए, यदि कोई विधि हस्ताक्षर DoSomething<T>(t withThis) है, तो आप इस विधि को DoSomething<string>("with me")या पर आज़मा सकते हैं, आप जेनेरिक प्रकार: DoSomething("with me") छोड़ सकते हैं। ऐसा इसलिए है क्योंकि संकलक विधि के रूप में विधि में पारित प्रकारों को देखता है और विधि के लिए प्रकार पैरामीटर को आंकड़े देता है। बहुत बढ़िया।

+0

अच्छा लिंक। यही वह चीज है जिसे मैं ढूंढ रहा था, धन्यवाद। –

0

जॉन स्कीट की पुस्तक C# in Depth जेनेरिक और लिनक में विस्तार से जाती है और मेरे लिए बहुत कुछ साफ़ करती है - मैं अत्यधिक अनुशंसा कर सकता हूं।

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