可能重复:
C# Iterating through an enum? (Indexing a System.Array)
我想要做的就是编写一个函数,可以将任何枚举作为参数并打印该枚举的值,但似乎不可能:
例如,我想这样做:
void PrintEnumValues(Enum e) { ... }
enum Example1 { a, b }
enum Example2 { one, two }
PrintEnumValues(Example1);
PrintEnumValues(Example2);
这样的事情可能吗?
答案 0 :(得分:9)
class Program
{
enum Example1 { a, b }
enum Example2 { one, two }
static void Main()
{
PrintEnumValues(default(Example1));
PrintEnumValues(default(Example2));
}
static void PrintEnumValues(Enum e)
{
foreach (var item in Enum.GetValues(e.GetType()))
{
Console.WriteLine(item);
}
}
}
答案 1 :(得分:2)
可能但你需要制作PrintEnumValues的反射体。
...
PrintEnumValues(typeof(Example1));
...
void PrintEnumValues(Type type)
{
//sample: Enum.GetNames(type)
//sample: Enum.GetValues(type)
}
答案 2 :(得分:1)
您可以使用Enum.GetValues()并传递枚举的类型以获取值的数组。
答案 3 :(得分:0)
以下是我的建议:
void PrintEnumValues<TEnum>()
{
if (!typeof(Enum).IsAssignableFrom(typeof(TEnum)))
{
return;
}
foreach (var name in Enum.GetNames(typeof(TEnum)))
{
// Print name
}
}
调用那个函数:
PrintEnumValues<Example1>();
PrintEnumValues<Example2>();
答案 4 :(得分:0)
enum Example1
{ a, b }
enum Example2
{ one, two }
public T[] GetEnumMembers<T>() where T : struct
{
T[] values = (T[])Enum.GetValues(typeof(T));
return values;
}
然后将其用作:
var values = GetEnumMembers<Example1>();
答案 5 :(得分:0)
您在评论I'm not asking about iterating
中说过。所以我假设您要打印“a”:
PrintEnumValues(Example1.a);
不是
PrintEnumValues(Example1);