इस कोड पर विचार करें समझना:विस्तार ElementAt (इंडेक्स)
int size = 100 * 1000 * 1000;
var emu = Enumerable.Range(0, size);
var arr = Enumerable.Range(0, size).ToArray();
जब मैं emu.ElementAt फोन (आकार -10) और arr.ElementAt (आकार -10) और समय आगमन तेज हो गया है को मापने (IENumerable 0.5 9s की तुलना में सरणी 0.0002 है)।
मैं यह समझ के रूप में, विस्तार विधि ElementAt() हस्ताक्षर
public static TSource ElementAt<TSource>(this IEnumerable<TSource> source, int index)
और 'स्रोत' एक IEnumerable है के बाद से तर्क किए गए समान होगा - मैं क्या देखते हैं जहां सरणी करने का विरोध किया सीधे पहुंचा जा सकता है।
कोई यह समझाने कृपया सकते हैं :)
आप अपने कस्टम संग्रह प्रकार को 'IList' लागू करके ऑप्टिमाइज़ेशन में कुछ हद तक अप्रत्यक्ष रूप से ऑप्ट-इन कर सकते हैं, लेकिन इसे स्पष्ट रूप से कार्यान्वित करें और/या केवल अपने संग्रह को 'IENumerable ' के रूप में सार्वजनिक रूप से बेनकाब करें। यह आदर्श नहीं है, लेकिन मूल रूप से ये ऑप्टिमाइज़ेशन 'हुक' हैं। यदि आप चाहते थे, तो आप प्रत्येक कस्टम एक्सटेंशन विधि के लिए एक कस्टम इंटरफ़ेस प्रदान कर सकते हैं जो क्लास लेखक को एक्सटेंशन विधि व्यवहार को ओवरराइड करने की अनुमति देता है, हालांकि यह थोड़ा सा हो सकता है। 'widgetExtensions.ToggleWidget (यह विजेट विजेट) 'और' WidgetExtensions.IToggleWidget '। –