Como posso atribuir o valor selecionado em uma checkbox de listview a um enum var?

Eu quero evitar o kludginess de:

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 ( . . .) } 

Existe uma maneira que eu possa atribuir de forma mais elegante ou eloquente a um enum baseado em uma seleção de checkbox de listview, algo como:

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

?

Você poderia tentar algo assim

 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; } 

Com Enum.Parse você pode converter de uma string para um Enum.

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

Também existe o método Enum.TryParse que retorna um bool indicando se a análise é bem-sucedida.