এই ফলাফলটি অর্জনের জন্য অন্য একটি উপায় রয়েছে যা ব্যবহারে অনেক পরিচ্ছন্ন তবে আরও কোড প্রয়োজন। আমার একটি কাস্টম টাইপ এবং টাইপ রূপান্তরকারী নিম্নলিখিত কোডটি কার্যকর করা সম্ভব:
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);
}
}
মাইনিম্বারআরে ক্লাসে কিছু সুবিধামত পদ্ধতি সরবরাহ করে আমরা তারপরে তালিকাতে এবং সুরক্ষিতভাবে নিরাপদে নির্ধারণ করতে পারি, সম্পূর্ণ শ্রেণিটি দেখতে এমন কিছু দেখাচ্ছে:
[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(); }
}
শেষ অবধি, সেটিংসে এটি ব্যবহার করার জন্য আপনি উপরোক্ত ক্লাসগুলিকে কোনও সমাবেশে যুক্ত করে সংকলন করুন। আপনার সেটিংস.সেটেটিং এডিটরে আপনি কেবল "ব্রাউজ করুন" বিকল্পটি ক্লিক করুন এবং মাইम्बरবারি ক্লাসটি নির্বাচন করুন এবং আপনি চলে যাবেন।
আবার এটি অনেক বেশি কোড; তবে এটি সাধারণ অ্যারের চেয়ে অনেক বেশি জটিল ধরণের ডেটাতে প্রয়োগ করা যেতে পারে।