2013-03-01 7 views
7

यह एक साधारण सवाल (मुझे आशा है), वहाँ List<T> तरह संग्रह कक्षाओं में सामान्य और गैर सामान्य तरीकों कि इस तरह के Where और Where<T> तरीके के रूप में कर रहे हैं।सी # सूची जेनेरिक एक्सटेंशन विधि बनाम गैर-जेनेरिक

उदाहरण:

 List<int> numbers = new List<int>() 
     { 
      1, 2, 3, 4, 5, 6, 7, 8, 9, 10 
     }; 

     IEnumerable<int> evens = numbers.Where((x) => 
     { 
      return x % 2 == 0; 
     }); 

     IEnumerable<int> evens2 = numbers.Where<int>((x) => 
     { 
      return x % 2 == 0; 
     }); 

एक दूसरे के ऊपर का प्रयोग क्यों (जेनेरिक या गैर जेनेरिक)?

उत्तर

11

वे एक ही विधि हैं (दस्तावेज़ीकरण here)। विधि नाम के बाद प्रकार पैरामीटर भाग (यानी <int> इस मामले में) वैकल्पिक है जब संकलक संदर्भ से स्वचालित रूप से और अनजाने में प्रकार का अनुमान लगा सकता है। इस मामले में, इंटरफेस IEnumerable<int> (यानी ऑब्जेक्ट numbers टाइप List<int>) को लागू करने वाली ऑब्जेक्ट पर विधि लागू की जा रही है, जिससे संकलक सुरक्षित रूप से अनुमान लगा सकता है कि प्रकार पैरामीटर int है।

ध्यान दें, यह भी है कि Where<T> वास्तव में System.Linq.Enumerable वर्ग है जो किसी भी वर्ग IEnumerable<T> ऐसे List<T> के रूप में लागू करने की वस्तुओं पर लागू किया जा सकता है पर एक विस्तार विधि है।

+0

स्पष्ट स्पष्टीकरण के लिए धन्यवाद! – infbubble

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