Chociaż naprawdę nie jest możliwe użycie a charlub a stringjako podstawy wyliczenia, myślę, że nie jest to to, co naprawdę lubisz robić.
Jak wspomniałeś, chciałbyś mieć wyliczenie możliwości i pokazać ich łańcuchową reprezentację w polu kombi. Jeśli użytkownik wybierze jedną z tych reprezentacji ciągu, chcesz uzyskać odpowiednie wyliczenie. A to jest możliwe:
Najpierw musimy połączyć jakiś ciąg z wartością wyliczenia. Można to zrobić, korzystając z metody DescriptionAttributeopisanej tutaj lub tutaj .
Teraz musisz utworzyć listę wartości wyliczeniowych i odpowiadających im opisów. Można to zrobić za pomocą następującej metody:
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();
}
Teraz będziesz mieć listę par klucz-wartość wszystkich wyliczeń i ich opis. Więc po prostu przypiszmy to jako źródło danych dla pola kombi.
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());
}
Użytkownik widzi wszystkie reprezentacje ciągów wyliczenia, a w kodzie otrzymasz żądaną wartość wyliczenia.