.NET में आप एक हैशटेबल को उपयोगकर्तासेटिंग के प्रकार के रूप में चुन सकते हैं। हालांकि जब मैं इसे सहेजता हूं और इसे इस तरह से पुनर्प्राप्त करता हूं, तो ऐसा लगता है कि ऐसा नहीं हुआ है।उपयोगकर्ता सेटिंग्स में हैशटेबल को कैसे स्टोर करें?
Hashtable t = new Hashtable();
t.Add(1,"Foo");
t.Add(2,"Bar");
Properties.Settings.Default.Setting = t;
Properties.Settings.Default.Save();
if(Properties.Settings.Default.Setting != null)
foreach (DictionaryEntry entry in Properties.Settings.Default.Setting)
{
MessageBox.Show(entry.Key + " " + entry.Value);
}
यह उपयोगकर्ताओं को सेटिंग्स में क्रमबद्ध क्यों नहीं करता है, जब मैं स्पष्ट रूप से उस दृश्य स्टूडियो में उस प्रकार का चयन कर सकता हूं? मैं समझूंगा कि यह एक असूचीबद्ध प्रकार के साथ शब्द था, जैसे कि शब्दकोश, लेकिन हैशटेबल सूचीबद्ध है। मैं इस समस्या का समाधान कैसे कर सकता हूं।
इस आदेश में सरलता और दक्षता मेरे लिए सर्वोच्च प्राथमिकता है।
कई धन्यवाद, Kave
अद्यतन:
@Joao, कई धन्यवाद बाइनरी समाधान। मुझे यह काफी रोचक लगता है, यह साफ है। द्विआधारी के रूप में इसे क्रमबद्ध करने के साथ एक अव्यवस्था यह तथ्य हो सकता है कि आप मैन्युअल रूप से उपयोगकर्तासेट फ़ाइल में कुछ भी नहीं बदल सकते हैं। लेकिन मुझे लगता है कि वैसे भी बहुत ही कम किया जाएगा, इसलिए यह एक अच्छा समाधान है।
मैं उपयोगकर्ता स्कोप में टाइप स्ट्रिंग के "एक्सएमएलसेटिंग" फ़ील्ड को बनाने के लिए एक अलग दृष्टिकोण के बारे में सोच रहा था और इस कोड का उपयोग एक एक्सएमएल फ़ाइल को एक हैशटेबल में क्रमबद्ध करने के लिए स्टोर और पुनर्प्राप्त करने के लिए करता हूं। लेकिन मुझे यकीन है कि यह सबसे अच्छा तरीका नहीं है, क्या किसी को हैशटेबल/डिक्शनरी को उपयोगकर्ताेटिंग में एक्सएमएल के रूप में क्रमबद्ध करने का बेहतर तरीका पता है, जो मैं नीचे कर रहा हूं उसके अलावा?
if(string.IsNullOrEmpty(Properties.Settings.Default.XMLSetting))
{
Console.WriteLine("Usersettings is empty. Initializing XML file...");
XmlDocument doc = new XmlDocument();
XmlElement hashtable = doc.CreateElement("HashTable");
doc.AppendChild(hashtable);
GenerateValues(doc, hashtable, "1", "Foo");
GenerateValues(doc, hashtable, "2", "Bar");
Properties.Settings.Default.XMLSetting = doc.OuterXml;
Properties.Settings.Default.Save();
}
else
{
Console.WriteLine("Retrieving existing user settings...");
XmlDocument doc = new XmlDocument();
doc.LoadXml(Properties.Settings.Default.XMLSetting);
Hashtable hashtable = new Hashtable();
foreach (XmlNode entry in doc.DocumentElement.ChildNodes)
{
hashtable.Add(int.Parse(entry.FirstChild.InnerText), entry.FirstChild.NextSibling.InnerText);
}
foreach (DictionaryEntry entry in hashtable)
{
Console.WriteLine(entry.Key + " " + entry.Value);
}
}
private static void GenerateValues(XmlDocument doc, XmlElement hashtable, string skey, string svalue)
{
XmlElement entry = doc.CreateElement("entry");
XmlElement key = doc.CreateElement("Key");
XmlElement value = doc.CreateElement("Value");
entry.AppendChild(key);
entry.AppendChild(value);
key.AppendChild(doc.CreateTextNode(skey));
value.AppendChild(doc.CreateTextNode(svalue));
hashtable.AppendChild(entry);
}
मैंने अभी एक हैशटेबल को उपयोगकर्ता सेटिंग के रूप में बनाए रखने का परीक्षण किया है और कोई समस्या नहीं मिली है। यदि आपने इसे पहले से नहीं किया है, तो इसे एक नई टेस्ट प्रोजेक्ट में स्क्रैच से करने का प्रयास करें। –
हाय, मैंने अभी कोशिश की है। यह गुणों को एसएसएइंग रखता है। सेटिंग्स। डिफॉल्ट। स्टेटिंग को शून्य के रूप में रहता है, भले ही मैंने सहेजा और एप्लिकेशन को पुनरारंभ किया। हालांकि यह अन्य प्रकार के स्ट्रिंग के साथ काम करता है। आप इसे कैसे काम करते हैं? क्या आप अपना समाधान किसी भी तरह पोस्ट कर सकते हैं? – Houman
मैं अपने परीक्षणों में जल्दबाजी करना चाहता था। डिफ़ॉल्ट सेटिंग्स वर्ग के साथ एप्लिकेशन रन के बीच हैशटेबल जारी नहीं है। हालांकि यदि आपके लिए हैशटेबल होना महत्वपूर्ण है और कुछ मैन्युअल कार्य नहीं करते हैं, तो आप मेरा जवाब देख सकते हैं। –