Es gibt eine andere Möglichkeit, dieses Ergebnis zu erreichen, das viel sauberer ist, aber mehr Code erfordert. Meine Implementierung eines benutzerdefinierten Typ und Typkonverter der folgende Code ist möglich:
List<int> array = Settings.Default.Testing;
array.Add(new Random().Next(10000));
Settings.Default.Testing = array;
Settings.Default.Save();
das Sie brauchen, um mit einem Typ-Wandler, einen Typ zu erreichen, die Konvertierung zu und von Strings erlaubt. Sie tun dies, indem sie die Art mit dem Typeconverter Dekoration:
[TypeConverter(typeof(MyNumberArrayConverter))]
public class MyNumberArray ...
Dann als Ableitung von Typeconverter diese Art Konverter Umsetzung:
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);
}
}
Durch einige bequeme Methoden auf der MyNumberArray Klasse bieten wir weisen Sie dann sicher zu und von List, würde die komplette Klasse in etwa so aussehen:
[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(); }
}
schließlich das Sie die oben genannten Klassen ein Add in den Einstellungen zu verwenden, assemblieren und kompilieren In Ihrem Settings.settings-Editor klicken Sie einfach auf die Option "Durchsuchen" und wählen Sie die MyNumberArray-Klasse aus und los gehts.
Auch dies ist viel mehr Code; Es kann jedoch auf viel kompliziertere Datentypen als ein einfaches Array angewendet werden.
Ich bin auch ganz neu zu Stackoverflow (die btw süß ist), also bitte, wenn ich nicht flammend habe irgendwelche Regeln oder Richtlinien gebrochen. :-) – sidewinderguy
Willkommen! Wir sind hier, um zu helfen (und Sie können auch, wenn Sie möchten) – Abel
+1 für ein Neuling;) –