根据枚举名称动态查找枚举值

时间:2013-09-14 12:24:18

标签: c# reflection combobox enums

我有1个这样的“car_brands”枚举声明:

public enum Car_brands
{
    Audi = 1,
    ...
    ...
}

以及许多其他枚举每个“car_brand”的声明,如此

public enum Audi
{
    model_a3 = 1,
    model_a4 = 2,
    ...
}

我有2个组合框。与car_brands相关的一个:

 comboBox1.DataSource = new BindingSource(Car_brands.Keys, null);

我希望其他组合框填充选择品牌的枚举(例如奥迪的奥迪Enum车型)。

我试试这个但看起来并不准确......

private void comboBox3_SelectedValueChanged(object sender, EventArgs e)
        {
string value = comboBox1.Text;   //car brand
Type type = Type.GetType(value);
var brand_models = Enum.GetNames(type.GetType());
                foreach (string enumValue in brand_models)
                    {
                        string brand_model = enumValue;
                        MessageBox.Show(brand_model);
                    }

        }

2 个答案:

答案 0 :(得分:3)

Type type = Type.GetType("full namespace where you declare enum" + "." + value);
var brand_models = Enum.GetNames(type);

如果是嵌套类型,则需要使用"+"而不是"."

C# : having a "+" in the class name?

答案 1 :(得分:1)

我可以想出很多更好的方法来解决你的任务,但这应该适合你选择的情况:

private void comboBox3_SelectedValueChanged(object sender, EventArgs e)
{
  string value = comboBox1.Text;   //car brand
  Type type = Type.GetType("YOUR_NAMESPACE." + value);
  var brand_models = Enum.GetNames(type);
  foreach (string enumValue in brand_models)
  {
    string brand_model = enumValue;
    MessageBox.Show(brand_model);
  }
}

请阅读Type.GetType文档(to be found here),以获得针对特定类层次结构和装配情况的正确解决方案。