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