क्या कोई समझा सकता है कि LINQ कैसे कार्य करता है (..) और FindAll (..) अलग-अलग हैं? वे दोनों एक ही काम करने लगते हैं ...
क्या कोई समझा सकता है कि LINQ कैसे कार्य करता है (..) और FindAll (..) अलग-अलग हैं? वे दोनों एक ही काम करने लगते हैं ...
जवाबों:
FindAll()List<T>प्रकार पर एक समारोह है , यह एक LINQ विस्तार विधि की तरह नहीं है Where। LINQ एक्सटेंशन मेथड्स किसी भी प्रकार पर काम करते हैं जो लागू करता है IEnumerable, जबकि FindAllइसका उपयोग केवल List<T>इंस्टेंस पर किया जा सकता है (या उन वर्गों के उदाहरण जो निश्चित रूप से इसे प्राप्त करते हैं)।
इसके अतिरिक्त, वे वास्तविक उद्देश्य में भिन्न हैं। जब वस्तु की गणना की जाती है तो उसका Whereएक उदाहरण IEnumerableऑन-डिमांड निष्पादित होता है। FindAllएक नया रिटर्न देता List<T>है जिसमें अनुरोधित तत्व होते हैं। FindAllके Where(...).ToList()उदाहरण पर कॉल करना अधिक पसंद है IEnumerable।
मेरे लिए सबसे बड़ा अंतर यह है कि .FindAll .Net 2.0 में भी उपलब्ध है। मेरे पास .Net 3.5 में प्रोग्राम करने के लिए हमेशा लक्जरी नहीं है, इसलिए मैं .net जेनेरिक संग्रह के 'मूल' तरीकों को याद रखने की कोशिश करता हूं।
यह कई बार हुआ कि मैंने पहले से ही उपलब्ध सूची पद्धति को स्वयं लागू किया क्योंकि मैं इसे LINQ नहीं कर सका।
इस मामले में मुझे जो काम मिलता है वह है, VS2008 का उपयोग करते हुए, मैं टाइप इंट्रेंस और लैम्ब्डा सिंटैक्स का उपयोग कर सकता हूं । ये कंपाइलर फीचर्स हैं, फ्रेमवर्क फीचर्स नहीं। इसका मतलब है कि मैं इसे लिख सकता हूं और अभी भी .Net 2.0 में बना रहेगा:
var myOddNums = myNums.FindAll(n => n%2==1);
लेकिन यदि आपके पास LINQ उपलब्ध है, तो आस्थगित निष्पादन और तत्काल निष्पादन के बीच अंतर रखना महत्वपूर्ण है।
यदि मुझे सही ढंग से याद है, तो मुख्य अंतर (इसके अलावा जो वे पर लागू होते हैं: IEnumerable<T>बनाम List<T>) वह Whereक्रियान्वयन है, जहां वह वास्तव में लुकअप नहीं करता है जब तक आपको इसकी आवश्यकता नहीं होती है - उदाहरण के लिए फॉरच लूप में इसका उपयोग करना। FindAllएक तत्काल निष्पादन विधि है।
मैंने 80K ऑब्जेक्ट्स की सूची में कुछ परीक्षण किए और पाया कि Find()एक के Whereसाथ प्रयोग करने से 1000% तक तेज हो सकता है FirstOrDefault()। मुझे नहीं पता था कि प्रत्येक कॉल से पहले और बाद में एक टाइमर का परीक्षण करने तक। कभी-कभी यह एक ही समय था, अन्य बार यह तेज था।