将枚举传递给函数

时间:2011-12-07 10:06:00

标签: c# enums

  

可能重复:
  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);

这样的事情可能吗?

6 个答案:

答案 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);