इस परिणाम को प्राप्त करने का एक और तरीका है जो उपयोग में बहुत साफ है लेकिन अधिक कोड की आवश्यकता है। मेरा एक कस्टम प्रकार लागू करना और निम्नलिखित कोड को टाइप करना संभव है:
List<int> array = Settings.Default.Testing;
array.Add(new Random().Next(10000));
Settings.Default.Testing = array;
Settings.Default.Save();
इसे प्राप्त करने के लिए आपको एक प्रकार के कनवर्टर के साथ एक प्रकार की आवश्यकता होती है जो स्ट्रिंग से और इसमें रूपांतरण की अनुमति देता है। आप TypeConverterAttribute के साथ प्रकार को सजाने के द्वारा ऐसा करते हैं:
[TypeConverter(typeof(MyNumberArrayConverter))]
public class MyNumberArray ...
फिर इस प्रकार के कन्वर्टर को टाइपकोर्टर के व्युत्पत्ति के रूप में लागू करना:
class MyNumberArrayConverter : TypeConverter
{
public override bool CanConvertTo(ITypeDescriptorContext ctx, Type type)
{ return (type == typeof(string)); }
public override bool CanConvertFrom(ITypeDescriptorContext ctx, Type type)
{ return (type == typeof(string)); }
public override object ConvertTo(ITypeDescriptorContext ctx, CultureInfo ci, object value, Type type)
{
MyNumberArray arr = value as MyNumberArray;
StringBuilder sb = new StringBuilder();
foreach (int i in arr)
sb.Append(i).Append(',');
return sb.ToString(0, Math.Max(0, sb.Length - 1));
}
public override object ConvertFrom(ITypeDescriptorContext ctx, CultureInfo ci, object data)
{
List<int> arr = new List<int>();
if (data != null)
{
foreach (string txt in data.ToString().Split(','))
arr.Add(int.Parse(txt));
}
return new MyNumberArray(arr);
}
}
MyNumberArray वर्ग पर कुछ सुविधा विधियाँ प्रदान करके हम सुरक्षित रूप से और सूची से असाइन कर सकते हैं, पूरा वर्ग कुछ देखेगा:
[TypeConverter(typeof(MyNumberArrayConverter))]
public class MyNumberArray : IEnumerable<int>
{
List<int> _values;
public MyNumberArray() { _values = new List<int>(); }
public MyNumberArray(IEnumerable<int> values) { _values = new List<int>(values); }
public static implicit operator List<int>(MyNumberArray arr)
{ return new List<int>(arr._values); }
public static implicit operator MyNumberArray(List<int> values)
{ return new MyNumberArray(values); }
public IEnumerator<int> GetEnumerator()
{ return _values.GetEnumerator(); }
IEnumerator IEnumerable.GetEnumerator()
{ return ((IEnumerable)_values).GetEnumerator(); }
}
अंत में, सेटिंग्स में इसका उपयोग करने के लिए आप उपरोक्त वर्गों को एक विधानसभा में जोड़ते हैं और संकलन करते हैं। अपने Settings.settings संपादक में आप बस "ब्राउज़ करें" विकल्प पर क्लिक करें और MyNumberArray वर्ग का चयन करें और आप से दूर जाएं।
फिर से यह एक बहुत अधिक कोड है; हालाँकि, यह एक साधारण सरणी की तुलना में बहुत अधिक जटिल प्रकार के डेटा पर लागू किया जा सकता है।