【问题标题】:C# get comboBox Value and convert from string to custom enum elegantly [duplicate]C#获取comboBox值并优雅地从字符串转换为自定义枚举[重复]
【发布时间】:2017-08-24 09:32:20
【问题描述】:

我的问题是我有一个组合框,里面装满了长度或重量等单位。英寸,英尺,码。或盎司、磅、吨。无论如何,我有枚举,例如

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 的内容时无法从字符串转换。

【问题讨论】:

  • 您使用的是 WinForms 还是 WPF?

标签: c# combobox enums


【解决方案1】:

如果您确定 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
}

【讨论】:

  • 感谢格兰特,我知道必须有一个简单的解决方案,这就是这些语言的全部原因。我非常感谢快速且非常有用的响应。它就像一个魅力:)
【解决方案2】:

Enum.TryParse 将满足您的需求。

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

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

【讨论】:

  • 感谢您的回复:)
猜你喜欢
  • 2011-12-09
  • 1970-01-01
  • 2012-12-07
  • 2014-08-20
  • 1970-01-01
  • 1970-01-01
  • 2019-02-21
相关资源
最近更新 更多