इस व्यवहार को समर्थन देने के लिए कुछ जटिल जटिल आंतरिक हैंडलिंग की आवश्यकता है, इसलिए अधिकांश संग्रह इस का समर्थन नहीं करते हैं (मुझे Concurrent
नामस्थान के बारे में निश्चित नहीं है)।
हालांकि, आप अपरिवर्तनीय संग्रहों का उपयोग करके इस व्यवहार को बहुत अच्छी तरह से अनुकरण कर सकते हैं। वे आपको डिज़ाइन द्वारा संग्रह को संशोधित करने की अनुमति नहीं देते हैं, लेकिन आप उनके साथ थोड़ा अलग तरीके से काम कर सकते हैं और इस तरह की प्रसंस्करण आपको जटिल हैंडलिंग के बिना समवर्ती रूप से गणना करने की अनुमति देती है (Concurrent
संग्रह में लागू)।
आप आसानी से इस तरह एक संग्रह को लागू कर सकते हैं, या आप (नहीं .NET 4.0 का एक मानक हिस्सा हालांकि) FSharp.Core.dll
से FSharpList<T>
उपयोग कर सकते हैं:
open Microsoft.FSharp.Collections;
// Create immutable list from other collection
var list = ListModule.OfSeq(anyCollection);
// now we can use `GetEnumerable`
var en = list.GetEnumerable();
// To modify the collection, you create a new collection that adds
// element to the front (without actually copying everything)
var added = new FSharpList<int>(42, list);
अपरिवर्तनीय संग्रह का लाभ यह है कि आप के साथ काम कर सकते हैं उन्हें मूल प्रतिबिंबित किए बिना (प्रतियां बनाकर), और इसलिए जो व्यवहार आप चाहते थे वह "मुफ्त में" है। अधिक जानकारी के लिए, great series by Eric Lippert है।
स्रोत
2010-05-02 14:41:19
क्या आप समझा सकते हैं कि आपको संग्रह को संशोधित करने की आवश्यकता क्यों है, जिसे आप पढ़ रहे हैं? आप जो चाहते हैं उसे करने का एक और तरीका हो सकता है। –