Saya membuat aplikasi Windows Forms sederhana menggunakan C # express 2008. Saya adalah pengembang C ++ berpengalaman, tetapi saya cukup baru mengenal C # dan .NET.
Saat ini saya menyimpan beberapa pengaturan aplikasi sederhana saya menggunakan desainer pengaturan dan kode seperti ini:
// Store setting
Properties.Settings.Default.TargetLocation = txtLocation.Text;
...
// Restore setting
txtLocation.Text = Properties.Settings.Default.TargetLocation;
Sekarang saya ingin menyimpan array ints ( int[]
), atau mungkin List of ints ( List< int >
), sebagai pengaturan. Namun, saya tidak tahu bagaimana melakukan ini. Saya telah mencari dokumentasi, stackoverflow, dan google, dan saya tidak dapat menemukan penjelasan yang layak tentang bagaimana melakukan ini.
Firasat saya berdasarkan contoh jarang yang saya temukan adalah bahwa saya harus membuat kelas yang dapat diserialisasi yang membungkus array atau Daftar saya, dan kemudian saya akan dapat menggunakan Jenis itu di desainer pengaturan. Namun, saya tidak yakin persis bagaimana melakukan ini.
int[]
akan terlihat seperti ini (kecuali cukup tercetak):<setting name="SomeTestSetting" serializeAs="String"><value><ArrayOfInt xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><int>1</int><int>2</int><int>3</int></ArrayOfInt></value></setting>
menyimpan:
string value = String.Join(",", intArray.Select(i => i.ToString()).ToArray());
untuk membuat ulang:
int[] arr = value.Split(',').Select(s => Int32.Parse(s)).ToArray();
Edit: Saran Abel!
sumber
System.Linq
menambahkan penggunaan / impor Anda agar trik di atas berfungsi.Ada satu cara lain untuk mencapai hasil ini yang jauh lebih bersih dalam penggunaan tetapi membutuhkan lebih banyak kode. Saya menerapkan konverter tipe dan tipe kustom, kode berikut dimungkinkan:
Untuk mencapai ini, Anda memerlukan tipe dengan konverter tipe yang memungkinkan konversi ke dan dari string. Anda melakukan ini dengan mendekorasi tipe dengan TypeConverterAttribute:
Kemudian mengimplementasikan konverter tipe ini sebagai turunan dari TypeConverter:
Dengan menyediakan beberapa metode praktis pada kelas MyNumberArray, kita dapat menetapkan dengan aman ke dan dari List, kelas lengkap akan terlihat seperti:
Terakhir, untuk menggunakan ini dalam pengaturan Anda menambahkan kelas di atas ke assembly dan kompilasi. Dalam editor Settings.settings Anda cukup mengklik opsi "Browse" dan memilih kelas MyNumberArray dan pergilah.
Sekali lagi ini lebih banyak kode; namun, ini dapat diterapkan pada jenis data yang jauh lebih rumit daripada larik sederhana.
sumber
Tentukan pengaturan sebagai System.Collections.ArrayList dan kemudian:
sumber
Solusi sederhananya adalah menyetel nilai default dari suatu setelan ke null di properti, tetapi di konstruktor periksa apakah properti tersebut null dan jika demikian, setel ke nilai default aktualnya. Jadi, jika Anda menginginkan array int:
Rasanya agak hacky, tetapi bersih dan berfungsi seperti yang diinginkan karena properti diinisialisasi ke pengaturan terakhir (atau default) sebelum konstruktor dipanggil.
sumber
Digunakan
System.Object
.Contoh:
Ekstrak:
sumber
Saya pikir Anda benar tentang membuat serial pengaturan Anda. Lihat jawaban saya untuk pertanyaan ini untuk contoh:
Teknik berbagi konfigurasi antara dua aplikasi?
Anda akan memiliki properti berupa array, seperti ini:
sumber
Buat beberapa fungsi yang mengonversi larik int dalam sebuah string, tetapi di antara masing-masing, letakkan karakter seperti "" (spasi).
Jadi jika arraynya adalah {1,34,546,56} stringnya akan menjadi "1 34 645 56"
sumber