खोज…


टिप्पणियों

यह सब पर प्रयोग करें?

आप यह तर्क दे सकते हैं कि .NET फ्रेमवर्क का आशय यह है कि प्रश्नों का कोई साइड इफेक्ट नहीं होता है और ForEach विधि एक साइड इफेक्ट का कारण बनती है। यदि आप इसके बजाय सादे foreach उपयोग करते हैं, तो आपको अपना कोड अधिक रख-रखाव और परीक्षण करने में आसान लग सकता है।

किसी सूची में किसी ऑब्जेक्ट पर एक विधि कॉलिंग

public class Customer {
   public void SendEmail()
   {
       // Sending email code here
   }
}

List<Customer> customers = new List<Customer>();

customers.Add(new Customer());
customers.Add(new Customer());

customers.ForEach(c => c.SendEmail());

IEnumerable के लिए एक्सटेंशन विधि

ForEach() को List<T> वर्ग पर परिभाषित किया गया है, लेकिन IQueryable<T> या IEnumerable<T> । आपके पास उन मामलों में दो विकल्प हैं:

ToList पहले

गणना (या क्वेरी) का मूल्यांकन किया जाएगा, परिणामों को एक नई सूची में कॉपी करके या डेटाबेस को कॉल करके। विधि को तब प्रत्येक आइटम पर बुलाया जाता है।

IEnumerable<Customer> customers = new List<Customer>();

customers.ToList().ForEach(c => c.SendEmail());

इस विधि में स्पष्ट मेमोरी उपयोग ओवरहेड है, क्योंकि एक मध्यवर्ती सूची बनाई जाती है।

विस्तार विधि

एक विस्तार विधि लिखें:

public static void ForEach<T>(this IEnumerable<T> enumeration, Action<T> action)
{
    foreach(T item in enumeration)
    {
        action(item);
    }
}

उपयोग:

IEnumerable<Customer> customers = new List<Customer>();

customers.ForEach(c => c.SendEmail());

सावधानी: फ्रेमवर्क के LINQ तरीकों को शुद्ध होने के इरादे से डिजाइन किया गया है, जिसका अर्थ है कि वे साइड इफेक्ट का उत्पादन नहीं करते हैं। ForEach विधि का एकमात्र उद्देश्य साइड इफेक्ट्स का उत्पादन करना है, और इस पहलू में अन्य तरीकों से ForEach । आप इसके बजाय सिर्फ एक सादे foreach लूप का उपयोग करने पर विचार कर सकते हैं।



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow