有一個其他的方式來實現這一結果是在使用清潔劑很多,但需要更多的代碼。我實現自定義類型和類型轉換器下面的代碼是可能的:
List<int> array = Settings.Default.Testing;
array.Add(new Random().Next(10000));
Settings.Default.Testing = array;
Settings.Default.Save();
要做到這一點,你需要一個類型轉換器,允許轉換和從字符串類型。
[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類,那麼我們就可以放心地分配一些方便的方法您可以通過裝飾與TypeConverterAttribute類型做到這一點來自列表,完整的類將看起來像這樣:
[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類,然後離開你。
再次,這是一個很大的代碼;然而,它可以應用於比簡單數組更復雜的數據類型。
我也是全新的,以計算器(這是甜蜜的BTW),所以請不燃燒,如果我破壞了任何規則或準則。 :-) – sidewinderguy 2009-11-19 21:14:49
歡迎!我們在這裏幫助(你也可以做到,如果你喜歡),作爲一個新手 – Abel 2009-11-19 21:18:55
+1;) – 2009-11-19 21:24:16