将枚举传递给函数

3
可能重复:
C# 如何遍历枚举类型?(索引System.Array) 我想要做的就是编写一个函数,可以将任何枚举作为参数并打印该枚举的值,但似乎不可能:
例如,我想要做到这一点:
void PrintEnumValues(Enum e) { ... }

enum Example1 { a, b }
enum Example2 { one, two }

PrintEnumValues(Example1);
PrintEnumValues(Example2);

这种情况是否可行?

1
尝试实际编写它,看看是否能证明自己是错误的。 - BoltClock
你的意思是你想要输出 "a b" 还是 "a" 还是 "0" 还是 "0 1"?也就是说,你是想打印整个集合还是只打印一个实例?当你说值时,是指字符串表示还是整数? - Buh Buh
6个回答

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);         
        }
    }
}

2

可以实现,但需要对PrintEnumValues的反射体进行修改。

...
PrintEnumValues(typeof(Example1));
...


void PrintEnumValues(Type type)
{
 //sample: Enum.GetNames(type)
 //sample: Enum.GetValues(type)
}

1

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>(); 

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>();

0

你在评论中说:我不是在问如何迭代。所以我认为你想要打印出 "a":

PrintEnumValues(Example1.a);

不是

PrintEnumValues(Example1);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接