将枚举传递给函数

本文关键字:函数 枚举 | 更新日期: 2023-09-27 18:16:56

可能重复:
C#遍历枚举?(索引System.Array(

我只想写一个函数,可以将任何枚举作为参数,并打印该枚举的值,但这似乎不可能:

例如,我想这样做:

void PrintEnumValues(Enum e) { ... }
enum Example1 { a, b }
enum Example2 { one, two }
PrintEnumValues(Example1);
PrintEnumValues(Example2);

这样的事情可能发生吗?

将枚举传递给函数

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

是可能的,但您需要使PrintEnumValues的反射体。

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

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

您可以使用Enum。GetValues((,并传递枚举的类型以获得值的数组。

这是我给你的建议:

void PrintEnumValues<TEnum>() 
{
    if (!typeof(Enum).IsAssignableFrom(typeof(TEnum)))
    {
        return;
    }
    foreach (var name in Enum.GetNames(typeof(TEnum)))
    {
        // Print name
    }
}

这样调用该函数:

PrintEnumValues<Example1>(); 
PrintEnumValues<Example2>(); 
    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>();

您在评论I'm not asking about iterating中说过。所以我想你想打印"a":

PrintEnumValues(Example1.a);

PrintEnumValues(Example1);