C# Linq question -


क्या LINQ एक अनुक्रम ऑपरेटर है, जो इसे प्रोजेक्ट किए बिना प्रत्येक तत्व पर कुछ कार्रवाई करने की अनुमति देता है एक नया अनुक्रम करने के लिए?

यह थोड़ा अजीब लग सकता है, लेकिन सिर्फ मुझे जानने के लिए:)

उदाहरण:

  IEnumerable & LT; IDisposable & gt; एक्स; X.PERFORM_ACTION_ON_EVERY_ELEMENT (एम = & gt; m.Dispose ());   

जाहिर है, यह ऐसा कुछ किया जा सकता है:

  foreach (x में var तत्व) x.Dispose () ;   

लेकिन अगर कुछ वास्तव में मौजूद है, तो यह अच्छा होगा।

नहीं, यह मौजूद नहीं है विशेष रूप से आपके उल्लेख के कारण: ऐसा लगता है कि एक ऑपरेटर जो सभी दूसरों से पूरी तरह से अलग व्यवहार करता है अजीब होता है।

एरिक लिपरेट, इस बारे में सी # कम्पाइलर डेवलपरों में से एक।

< P> लेकिन हम यहाँ थोड़ा गहरा जा सकते हैं। मैं दार्शनिक रूप से दो कारणों से ऐसी विधि प्रदान करने का विरोध कर रहा हूं।

पहला कारण यह है कि ऐसा करने से कार्यात्मक प्रोग्रामिंग सिद्धांतों का उल्लंघन हो जाता है कि सभी दूसरे अनुक्रम ऑपरेटरों पर आधारित हैं। स्पष्ट रूप से इस पद्धति को कॉल करने का एकमात्र उद्देश्य साइड इफेक्ट का कारण है।

किसी अभिव्यक्ति का उद्देश्य एक मान की गणना करना है, साइड इफेक्ट का कारण नहीं। एक बयान का उद्देश्य एक साइड इफेक्ट का कारण है। इस बात की कॉल साइट एक अभिव्यक्ति की तरह एक भयानक बहुत लग रही होगी (हालांकि, यह मान्य है, क्योंकि विधि शून्य-लौट रही है, अभिव्यक्ति का उपयोग केवल एक "कथन" अभिव्यक्ति में किया जा सकता है।) < / P>

यह एक और एकमात्र अनुक्रम ऑपरेटर बनाने के लिए मेरे साथ अच्छी तरह से नहीं बैठता है जो इसके दुष्प्रभावों के लिए उपयोगी है।

Comments