2012-12-06 11 views
8

विस्तार विधि ToList() कैसे काम करता है? मान लें कि मेरे पास 10000 आइटमों का IEnumerable है। ToList() एक नया List बनाएं और 10000 आइटमों के IEnumerable पर फिर से चालू करें और फिर मुझे List वापस करें या .NET इसे किसी अन्य तरीके से करता है?एक आईनेमरेबल काम पर ToList() कैसे करता है?

यह MSDN link डीबी क्वेरी के तत्काल निष्पादन के बारे में बात करता है। मेरा प्रश्न केवल IEnumerable को List में परिवर्तित करने के बारे में है।

उत्तर

22

यह जरूरी नहीं है, हालांकि यह "सबसे खराब मामला" परिदृश्य है। असल में यह new List<T>(source) पर कॉल करता है, लेकिन इसमें इसकी आस्तीन कुछ चाल है: यदि स्रोत ICollection<T> लागू करता है, तो कन्स्ट्रक्टर पूरे डेटा को सरणी में कॉपी करने के लिए ICollection<T>.CopyTo() पर कॉल कर सकता है। यह सिंगल-स्टेपिंग पुनरावृत्ति से अधिक कुशलतापूर्वक कार्यान्वित किया जा सकता है। इसी तरह ICollection<T> मामले में, नई सूची अंतिम आकार को शुरू करने के बारे में जानता है, इसलिए इसे अपने आंतरिक बफर का विस्तार करने की आवश्यकता नहीं होगी।

कुछ और विवरणों के लिए, मेरे Edulinq ToList() blog post देखें।

+0

उपर्युक्त लिंक कार्यात्मक नहीं है। आप यहां जॉन की पोस्ट पर जा सकते हैं - [एडुलिनक टूलिस्ट() ब्लॉग पोस्ट] (https://codeblog.jonskeet.uk/2011/01/01/reimplementing-linq-to-objects-part-20-tolist/) – vibhu

+0

@ विभू: लिंक अपडेट किया गया। –

2

.ToList विस्तार विधि List<T> कन्स्ट्रक्टर IEnumerable<T> पास करने वाले निर्माता को कॉल करती है। यह कन्स्ट्रक्टर IEnumerable<T> पर फिर से चालू होगा और उसी क्रम में IEnumerable<T> के elemtns को कॉपी करेगा।

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