Bir sıralama için temel olarak a char
veya a kullanmak gerçekten mümkün olmasa da string
, bence gerçekten yapmaktan hoşlandığınız şey bu değil.
Bahsettiğiniz gibi, bir olasılıklar listesine sahip olmak ve birleşik giriş kutusu içinde bunun bir dizi temsilini göstermek istiyorsunuz. Kullanıcı bu dize temsillerinden birini seçerse, karşılık gelen numaralandırmayı çıkarmak istersiniz. Ve bu mümkündür:
İlk önce bazı dizeleri bir enum değerine bağlamamız gerekir. Bu, burada veya buradaDescriptionAttribute
anlatıldığı gibi yapılabilir .
Şimdi, enum değerlerinin ve karşılık gelen açıklamaların bir listesini oluşturmanız gerekir. Bu, aşağıdaki yöntem kullanılarak yapılabilir:
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();
}
Şimdi tüm numaralandırmaların anahtar değer çiftlerinin ve açıklamalarının bir listesine sahip olacaksınız. Öyleyse, bunu bir birleşik giriş kutusu için bir veri kaynağı olarak atayalım.
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());
}
Kullanıcı, numaralandırmanın tüm dize temsillerini görür ve kodunuzun içinde istediğiniz enum değerini alırsınız.