【发布时间】:2011-06-23 13:36:17
【问题描述】:
我想知道如何将枚举类型作为方法参数传递。
我正在尝试创建一个通用方法,该方法将采用组合框和枚举,并用枚举的每个项目填充组合框。
【问题讨论】:
-
您遇到了什么问题?
我想知道如何将枚举类型作为方法参数传递。
我正在尝试创建一个通用方法,该方法将采用组合框和枚举,并用枚举的每个项目填充组合框。
【问题讨论】:
我认为最好用一个例子来解释:
假设你有一个枚举:
enum MyEnum
{
One,
Two,
Three
}
您可以声明如下方法:
public static void MyEnumMethod(Enum e)
{
var enumValues = Enum.GetValues(e.GetType());
// you can iterate over enumValues with foreach
}
你会这样称呼它:
MyEnumMethod(new MyEnum());
【讨论】:
public static IDictionary<String, Int32> ConvertEnumToDictionary<K>()
{
if (typeof(K).BaseType != typeof(Enum))
{
throw new InvalidCastException();
}
return Enum.GetValues(typeof(K)).Cast<Int32>().ToDictionary(currentItem => Enum.GetName(typeof(K), currentItem));
}
然后你可以用返回的字典项填充你的 ComboBox。
请参阅以下内容:
【讨论】:
你可以像这样一般地传递一个枚举:
private void Method(Enum tEnum)
{
Enum.GetValues(tEnum.GetType());
}
GetValues 将为您提供该枚举可能的值。
用法会有点奇怪:
Method(EnumType.Value)
所以它可能不像其他想法那样适合。
【讨论】:
使用这种方法,你不能像这样添加任何类型的枚举:AddItems(myCombobox, typeof(Options))
public void AddItems (ComboBox cboBox, Type enumType)
{
cboBox.Items.AddRange(Enum.GetValues (enumType).Cast<object> ().ToArray ());
}
enum Options
{
Left, Right, Center
}
【讨论】:
你可以使用:
Enum.GetValues(typeof(MyEnumType))
然后从中填充组合框项目
编辑:当然也可以使用反射来获取枚举类型:)
【讨论】:
【讨论】: