แม้ว่าจะไม่สามารถใช้ a char
หรือ a string
เป็นฐานสำหรับ enum ได้ แต่ฉันคิดว่านี่ไม่ใช่สิ่งที่คุณชอบทำจริงๆ
เช่นเดียวกับที่คุณพูดถึงคุณต้องการมีความเป็นไปได้มากมายและแสดงการแสดงสตริงของสิ่งนี้ภายในกล่องคำสั่งผสม หากผู้ใช้เลือกหนึ่งในการแสดงสตริงเหล่านี้คุณต้องการที่จะได้รับ enum ที่เกี่ยวข้อง และเป็นไปได้:
ก่อนอื่นเราต้องเชื่อมโยงสตริงกับค่า enum ซึ่งสามารถทำได้โดยใช้DescriptionAttribute
เหมือนว่ามันจะมีการอธิบายไว้ที่นี่หรือที่นี่
ตอนนี้คุณต้องสร้างรายการค่า enum และคำอธิบายที่เกี่ยวข้อง สามารถทำได้โดยใช้วิธีการต่อไปนี้:
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();
}
ตอนนี้คุณจะมีรายการคู่ค่าคีย์ของ enums ทั้งหมดและคำอธิบาย ลองกำหนดสิ่งนี้เป็นแหล่งข้อมูลสำหรับกล่องคำสั่งผสม
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());
}
ผู้ใช้จะเห็นการแสดงสตริงทั้งหมดของ enum และภายในรหัสของคุณคุณจะได้รับค่า enum ที่ต้องการ