C#get comboBox Value并优雅地从字符串转换为自定义枚举

时间:2013-11-27 17:54:03

标签: c# combobox enums

我的问题是我有一个装有长度或重量等单位的组合框。英寸,英尺,庭院。或者Oz,Lb,Ton。无论如何,我有

这样的枚举
public enum Torques {

    /// <remarks/>
    DyneCentimeters,

    /// <remarks/>
    FootPounds,

    /// <remarks/>
    InchPounds,

    /// <remarks/>
    KilogramMeter,

    /// <remarks/>
    MeterNewtons,
}

我需要一种优雅的方法来从下拉列表中获取值并创建匹配枚举类型的变量。现在我正在使用案例陈述,例如

 Computers fromUnit = Computers.Bit;
            switch (compFromUnit.Text)
            {
                case "Bit":
                    fromUnit = Computers.Bit;
                    break;
                case "Byte":
                    fromUnit = Computers.Byte;
                    break;
                case "Kilobyte":
                    fromUnit = Computers.Kilobyte;
                    break;
                case "Megabyte":
                    fromUnit = Computers.Megabyte;
                    break;
                case "Gigabyte":
                    fromUnit = Computers.Gigabyte;
                    break;
                case "Terabyte":
                    fromUnit = Computers.Terabyte;
                    break;
                case "Petabyte":
                    fromUnit = Computers.Petabyte;
                    break;
                default:
                    fromUnit = Computers.Bit;
                    break;
            }

我的一些列表非常冗长,以这种方式完成项目会需要一些非常长的案例陈述。我知道必须有一些方法可以在一行代码中完成所有这些。

当我尝试为选择分配值时,例如combo.selected.Text =“Bit”combo.selected.Value =“Computers.Bit”,然后说出类似toUnit = combo.selected.value的内容无法从字符串转换。

2 个答案:

答案 0 :(得分:2)

如果您肯定ComboBox下拉列表中的字符串值与您的枚举值完全匹配(在您的示例中似乎就是这种情况),则可以使用Enum.Parse

var userSelection = (Computers)Enum.Parse(typeof(Computers), compFromUnit.Text);

如果他们有可能无法完全匹配,请改为使用Enum.TryParse

Computers userSelection;

if (!Enum.TryParse(compFromUnit.Text, out userSelection))
{
    // You've got a value that doesn't exist in the Enum... do something
}

答案 1 :(得分:0)

Enum.TryParse符合您的需求。

Computers fromUnit;
var succes = Enum.TryParse(compFromUnit.Text, out fromUnit);

if(!succes)
{
    // Invalid string value
}