Während es wirklich nicht möglich ist, ein char
oder ein string
als Basis für eine Aufzählung zu verwenden, denke ich, dass dies nicht das ist, was Sie wirklich gerne tun.
Wie Sie bereits erwähnt haben, möchten Sie eine Reihe von Möglichkeiten haben und eine Zeichenfolgendarstellung davon in einem Kombinationsfeld anzeigen. Wenn der Benutzer eine dieser Zeichenfolgendarstellungen auswählt, möchten Sie die entsprechende Aufzählung erhalten. Und das ist möglich:
Zuerst müssen wir einen String mit einem Enum-Wert verknüpfen. Dies kann durch die durchgeführt werden , DescriptionAttribute
wie es beschrieben wird hier oder hier .
Jetzt müssen Sie eine Liste mit Aufzählungswerten und entsprechenden Beschreibungen erstellen. Dies kann mit der folgenden Methode erfolgen:
/// <summary>
/// Creates an List with all keys and values of a given Enum class
/// </summary>
/// <typeparam name="T">Must be derived from class Enum!</typeparam>
/// <returns>A list of KeyValuePair<Enum, string> with all available
/// names and values of the given Enum.</returns>
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();
}
Jetzt haben Sie eine Liste der Schlüsselwertpaare aller Aufzählungen und deren Beschreibung. Weisen wir dies einfach als Datenquelle für ein Kombinationsfeld zu.
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());
}
Der Benutzer sieht alle Zeichenfolgendarstellungen der Aufzählung und in Ihrem Code erhalten Sie den gewünschten Aufzählungswert.