Meskipun sangat tidak mungkin untuk menggunakan a charatau a stringsebagai basis untuk enum, saya rasa ini bukan yang benar-benar ingin Anda lakukan.
Seperti yang Anda sebutkan, Anda ingin memiliki enum kemungkinan dan menunjukkan representasi string ini dalam kotak kombo. Jika pengguna memilih salah satu representasi string ini, Anda ingin mengeluarkan enum yang sesuai. Dan ini mungkin:
Pertama kita harus menghubungkan beberapa string ke nilai enum. Ini dapat dilakukan dengan menggunakan DescriptionAttributeseperti yang dijelaskan di sini atau di sini .
Sekarang Anda perlu membuat daftar nilai enum dan deskripsi yang sesuai. Ini dapat dilakukan dengan menggunakan metode berikut:
public static IList<KeyValuePair<T, string>> ToList<T>() where T : struct
{
var type = typeof(T);
if (!type.IsEnum)
{
throw new ArgumentException("T must be an enum");
}
return (IList<KeyValuePair<T, string>>)
Enum.GetValues(type)
.OfType<T>()
.Select(e =>
{
var asEnum = (Enum)Convert.ChangeType(e, typeof(Enum));
return new KeyValuePair<T, string>(e, asEnum.Description());
})
.ToArray();
}
Sekarang Anda akan memiliki daftar pasangan nilai kunci dari semua enum dan deskripsinya. Jadi mari kita tetapkan ini sebagai sumber data untuk kotak kombo.
var comboBox = new ComboBox();
comboBox.ValueMember = "Key"
comboBox.DisplayMember = "Value";
comboBox.DataSource = EnumUtilities.ToList<Separator>();
comboBox.SelectedIndexChanged += (sender, e) =>
{
var selectedEnum = (Separator)comboBox.SelectedValue;
MessageBox.Show(selectedEnum.ToString());
}
Pengguna melihat semua representasi string dari enum dan dalam kode Anda, Anda akan mendapatkan nilai enum yang diinginkan.