मैं केवल पढ़ने-योग्य शब्दकोश का पर्दाफाश करने की कोशिश कर रहा हूं जिसमें केवल पढ़ने-योग्य इंटरफ़ेस वाले ऑब्जेक्ट हैं। आंतरिक रूप से, शब्दकोश लिखने योग्य है, और भीतर वस्तुएं हैं (उदाहरण कोड नीचे देखें)। मेरी समस्या यह है कि IReadOnlyDictionary प्रश्न here प्रश्न में उल्लिखित कारणों के कारण कॉन्वेंटियन रूपांतरणों का समर्थन नहीं करता है। इसका मतलब है कि मैं केवल एक आंतरिक पढ़ने के रूप में अपने आंतरिक शब्दकोश का खुलासा नहीं कर सकता।IReadOnlyDictionary के साथ covariance की कमी के आसपास कैसे प्राप्त करें?
तो मेरा सवाल यह है कि, मेरे आंतरिक शब्दकोश को आईआरएडऑनली डिक्शनरी में बदलने या इसे संभालने के किसी अन्य तरीके से बदलने का एक प्रभावी तरीका है? जिन विकल्पों के बारे में मैं सोच सकता हूं वे हैं:
- दो आंतरिक शब्दकोशों को पकड़ें और उन्हें सिंक में रखें।
- संपत्ति का उपयोग होने पर और सभी ऑब्जेक्ट्स को अंदर डालने पर एक नया शब्दकोश बनाएं।
- आईआरएड को केवल वापस पढ़ने के लिए नोट करें केवल आंतरिक रूप से इसका उपयोग करते समय।
1 दर्द की तरह लगता है, 2 अत्यधिक अक्षम लगता है। 3 इस समय सबसे अधिक आशाजनक की तरह लगता है, लेकिन अभी भी बदसूरत है। क्या मेरे पास अन्य विकल्प भी है?
public class ExposesReadOnly
{
private Dictionary<int, NotReadOnly> InternalDict { get; set; }
public IReadOnlyDictionary<int, IReadOnly> PublicList
{
get
{
// This doesn't work...
return this.InternalDict;
}
}
// This class can be modified internally, but I don't want
// to expose this functionality.
private class NotReadOnly : IReadOnly
{
public string Name { get; set; }
}
}
public interface IReadOnly
{
string Name { get; }
}
+1 मैंने ऐसा कुछ किया जब मुझे एक ऐसे शब्दकोश की आवश्यकता थी जिसमें उत्परिवर्तनीय और अपरिवर्तनीय विचार दोनों हों। –
यह एक शब्दकोश के एक पाठपूर्ण दृश्य की तरह है। शब्दकोश स्वयं भी बदल सकता है। – vidstige
@ vidstige, "शब्दकोश स्वयं भी बदल सकता है" - बेशक, यही कारण है कि यह निजी है। – Joe