使用String参数指定Enum Type

时间:2015-04-17 21:44:06

标签: c# asp.net enums

首先,如果这是一个重复的问题,我道歉。我一直在寻找太久无济于事。

假设我有两个枚举:

public enum Dogs
{
    Mastiff,
    Bulldog
}

public enum Cats
{
    Manx,
    Tiger
}

根据用户从ComboBox中选择“Cats”或“Dogs”,我想用适当的Enum值填充另一个ComboBox。这可以通过以下方法完成:

void PopulateComboBox<EnumType>(RadComboBox box, Enum displayUnits)
{
    // values and text derived from enumExtension methods
    foreach (Enum unit in Enum.GetValues(typeof(EnumType)))
    {
        var item = new RadComboBoxItem(unit.GetName(), unit.ToString());
        item.ToolTip = unit.GetDescription();
        if (displayUnits != null && unit.ToString() == displayUnits.ToString())
            item.Selected = true;
        box.Items.Add(item);
    }
}

如何从用户指定的字符串值中获取正确的EnumType,以便我可以像这样调用它(如果我可以指定'displayUnits'参数来强制进行所需的选择,则可以获得奖励积分):

string choice = myComboBox.SelectedValue;
?? choiceAsAnEnumType = choice variable converted in some way ??
PopulateComboBox<choiceAsAnEnumType>(outputComboBox, null);

这个实现很有用,因为我当前的项目中有大量的枚举。目前,我不得不做switch (choice)并在各种情况下传递适当的枚举类型。

该方法的任何变化都是可以接受的,因为我不会被锁定在这个策略中(在实施任何其他策略之外)。

编辑:为了解释TryParse / Parse建议,我对从字符串中获取枚举值(Mastiff或Bulldog)不感兴趣;而我想从字符串中获得Enum(狗或猫)的某种味道。 TryParse需要一个提供的T,在我的情况下我不知道T.如果我误解了作为TryParse示例提供的方法,我很抱歉,我对C#和ASP作为一个整体来说相对较新。

2 个答案:

答案 0 :(得分:0)

您可以从字符串加载类型以传递给您的方法,就像这样。你不会在populate方法中使用泛型。

class AnimalOptions
{
    public enum Dogs
    {
        Mastiff,
        Bulldog
    }

    public enum Cats
    {
        Manx,
        Tiger
    }
}


Type t = typeof(AnimalOptions);
Type enumType = t.GetNestedType("Dogs");
Populate(enumType);

答案 1 :(得分:0)

我会使用这样的枚举类型加载你的第一个组合框:

firstComboBox.Items.Add(new RadComboBoxItem(typeof(Dogs), typeof(Dogs).Name));
firstComboBox.Items.Add(new RadComboBoxItem(typeof(Cats), typeof(Cats).Name));

然后,从第一个组合框中的所选项目更改事件调用:

secondComboBox.Items.Clear();
foreach (var value in Enum.GetValues(firstComboBox.SelectedValue))
{
    secondComboBox.Items.Add(new RadComboBoxItem(value, value.ToString()));
}