首先,如果这是一个重复的问题,我道歉。我一直在寻找太久无济于事。
假设我有两个枚举:
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作为一个整体来说相对较新。
答案 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()));
}