C# 将枚举传递给函数

C# 将枚举传递给函数,c#,enums,C#,Enums,可能重复: 我只想编写一个函数,可以将任何枚举作为参数,并打印该枚举的值,但这似乎是不可能的: 例如,我想这样做: void PrintEnumValues(Enum e) { ... } enum Example1 { a, b } enum Example2 { one, two } PrintEnumValues(Example1); PrintEnumValues(Example2); 这样做可能吗?可能,但您需要将printEnumValue作为反射体 class Progra

可能重复:

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

例如,我想这样做:

void PrintEnumValues(Enum e) { ... }

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

PrintEnumValues(Example1);
PrintEnumValues(Example2);

这样做可能吗?

可能,但您需要将printEnumValue作为反射体

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(typeof(Example1));
...


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

您可以使用并传递枚举的类型来获取值数组。

以下是我给您的建议:

void PrintEnumValues<TEnum>() 
{
    if (!typeof(Enum).IsAssignableFrom(typeof(TEnum)))
    {
        return;
    }
    foreach (var name in Enum.GetNames(typeof(TEnum)))
    {
        // Print name
    }
}
void printnumvalues()
{
如果(!typeof(Enum).IsAssignableFrom(typeof(TEnum)))
{
返回;
}
foreach(Enum.GetNames中的变量名(typeof(TEnum)))
{
//印刷品名称
}
}
这样调用该函数:

PrintEnumValues<Example1>(); 
PrintEnumValues<Example2>(); 
PrintEnumValues();
PrintEnumValues();
枚举示例1
{a,b}
枚举示例2
{1,2}
公共T[]GetEnumMembers(),其中T:struct
{
T[]values=(T[])Enum.GetValues(typeof(T));
返回值;
}
然后将其用作:

    var values = GetEnumMembers<Example1>();
var values=GetEnumMembers();

你在评论中说
我不是在问迭代的问题。所以我假设你想打印“a”:

不是


试着写出来,看看你是否能证明自己是错的。你的意思是你希望你的输出是“AB”或“a”或“0”或“01”?也就是说,你的意思是打印整个集合还是只打印一个实例?当你说值是指字符串表示还是int?
    var values = GetEnumMembers<Example1>();
PrintEnumValues(Example1.a);
PrintEnumValues(Example1);