将枚举传递给函数
本文关键字:函数 枚举 | 更新日期: 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);