Как я могу присвоить значение, выбранное в списке, enum var?

Я хочу избежать кражи:

private void listBoxBeltPrinters_SelectedIndexChanged(object sender, System.EventArgs e) { string sel = string listBoxBeltPrinters.SelectedItem.ToString(); if (sel == "Zebra QL220") { PrintUtils.printerChoice = PrintUtils.BeltPrinterType.ZebraQL220; } else if (sel == "ONiel") { PrintUtils.printerChoice = PrintUtils.BeltPrinterType.ONiel; } else if ( . . .) } 

Есть ли способ, которым я могу более элегантно или красноречиво назначить перечисление на основе выбора списка, например:

 PrintUtils.printerChoice = listBoxBeltPrinters.SelectedItem.ToEnum(PrintUtils.BeltPrinterType)? 

?

Вы можете попробовать что-то вроде этого

 Array values = Enum.GetValues(typeof(BeltPrinterType));//If this doesn't help in compact framework try below code Array values = GetBeltPrinterTypes();//this should work, rest all same foreach (var item in values) { listbox.Items.Add(item); } private static BeltPrinterType[] GetBeltPrinterTypes() { FieldInfo[] fi = typeof(BeltPrinterType).GetFields(BindingFlags.Static | BindingFlags.Public); BeltPrinterType[] values = new BeltPrinterType[fi.Length]; for (int i = 0; i < fi.Length; i++) { values[i] = (BeltPrinterType)fi[i].GetValue(null); } return values; } private void listBoxBeltPrinters_SelectedIndexChanged(object sender, System.EventArgs e) { if(!(listBoxBeltPrinters.SelectedItem is BeltPrinterType)) { return; } PrintUtils.printerChoice = (BeltPrinterType)listBoxBeltPrinters.SelectedItem; } 

С Enum.Parse вы можете преобразовать из строки в Enum.

 PrintUtils.printerChoice = (PrintUtils.BeltPrinterType)Enum.Parse(typeof(PrintUtils.BeltPrinterType),listBoxeltPrinters.SelectedItem); 

Также существует метод Enum.TryParse, который возвращает bool, указывающий, выполнено ли синтаксическое parsingку.