C# 枚举与函数

C# 枚举与函数,c#,function,enums,C#,Function,Enums,如何创建一个获取枚举的函数,并同时打印它的值和名称? 如果这是我的枚举: 我试过: 但它不起作用 我想打印: 0-星期一 1-星期二 星期二至星期三 试试这些(所有代码都在VisualStudio中测试并正常工作): 或者(它将从0开始) 或 试试这些(所有代码都在VisualStudio中测试并正常工作): 或者(它将从0开始) 或 您可以通过这种方式获得枚举值的名称 Enum.GetName<DaysOfWeek>(value) Enum.GetName(值) 所以

如何创建一个获取枚举的函数,并同时打印它的值和名称? 如果这是我的枚举:



我试过:

但它不起作用
我想打印:

0-星期一 1-星期二 星期二至星期三


试试这些(所有代码都在VisualStudio中测试并正常工作):

或者(它将从0开始)

试试这些(所有代码都在VisualStudio中测试并正常工作):

或者(它将从0开始)


您可以通过这种方式获得枚举值的名称

Enum.GetName<DaysOfWeek>(value)
Enum.GetName(值)
所以

        public void ShowEnum(Enum EnumList)
        {
            foreach (var route in Enum.GetValues(typeof(EnumList)))
            {
                Console.WriteLine($"{(int)route} - {Enum. GetName<DayOfWeek>(route) }");
            }
        }
public void ShowEnum(枚举枚举列表)
{
foreach(Enum.GetValues中的var路由(typeof(EnumList)))
{
Console.WriteLine($“{(int)route}-{Enum.GetName(route)}”);
}
}

您可以通过这种方式获得枚举值的名称

Enum.GetName<DaysOfWeek>(value)
Enum.GetName(值)
所以

        public void ShowEnum(Enum EnumList)
        {
            foreach (var route in Enum.GetValues(typeof(EnumList)))
            {
                Console.WriteLine($"{(int)route} - {Enum. GetName<DayOfWeek>(route) }");
            }
        }
public void ShowEnum(枚举枚举列表)
{
foreach(Enum.GetValues中的var路由(typeof(EnumList)))
{
Console.WriteLine($“{(int)route}-{Enum.GetName(route)}”);
}
}

类似的功能应该可以使用(我现在无法在VS中尝试)

如果没有Enum泛型约束,则使用的是较旧的C#版本(此约束是在C#7.3中引入的)

如果是这种情况,您需要一些额外的检查,例如:

public void ShowEnum<TEnum>()
    where TEnum : struct, IConvertible
{
    if (!typeof(TEnum).IsEnum) 
    {
        throw new ArgumentException("TEnum is not an enum");
    }

    foreach (var enumValue in Enum.GetValues(typeof(TEnum)))
    {
        Console.WriteLine($"{(int)enumValue} - {enumValue}");
    }
}
public void ShowEnum()
其中TEnum:struct,i可转换
{
if(!typeof(TEnum).IsEnum)
{
抛出新ArgumentException(“TEnum不是枚举”);
}
foreach(Enum.GetValues中的var enumValue(typeof(TEnum)))
{
WriteLine($“{(int)enumValue}-{enumValue}”);
}
}

类似的功能应该可以使用(我现在无法在VS中尝试)

如果没有Enum泛型约束,则使用的是较旧的C#版本(此约束是在C#7.3中引入的)

如果是这种情况,您需要一些额外的检查,例如:

public void ShowEnum<TEnum>()
    where TEnum : struct, IConvertible
{
    if (!typeof(TEnum).IsEnum) 
    {
        throw new ArgumentException("TEnum is not an enum");
    }

    foreach (var enumValue in Enum.GetValues(typeof(TEnum)))
    {
        Console.WriteLine($"{(int)enumValue} - {enumValue}");
    }
}
public void ShowEnum()
其中TEnum:struct,i可转换
{
if(!typeof(TEnum).IsEnum)
{
抛出新ArgumentException(“TEnum不是枚举”);
}
foreach(Enum.GetValues中的var enumValue(typeof(TEnum)))
{
WriteLine($“{(int)enumValue}-{enumValue}”);
}
}

其他答案已经非常接近了-我想应该走的路是:

public static void ShowEnum<T>() where T : Enum
{
    foreach (var t in (T[])Enum.GetValues(typeof(T)))
    {
        Console.WriteLine($"{Enum.Format(typeof(T), t, "d")} - {t}");
    }
}
public static void ShowEnum(),其中T:Enum
{
foreach(在(t[])Enum.GetValues(typeof(t))中的var t)
{
WriteLine($“{Enum.Format(typeof(T),T,“d”)}-{T}”);
}
}

其他答案已经非常接近了-我想应该走的路是:

public static void ShowEnum<T>() where T : Enum
{
    foreach (var t in (T[])Enum.GetValues(typeof(T)))
    {
        Console.WriteLine($"{Enum.Format(typeof(T), t, "d")} - {t}");
    }
}
public static void ShowEnum(),其中T:Enum
{
foreach(在(t[])Enum.GetValues(typeof(t))中的var t)
{
WriteLine($“{Enum.Format(typeof(T),T,“d”)}-{T}”);
}
}

使用
Enum.GetValues
获取枚举的所有值。将枚举成员强制转换为
int
以获取其数值,或调用
ToString
以获取其名称。使用
enum.GetValues
获取枚举的所有值。将枚举成员强制转换为
int
以获取其数值,或调用
ToString
以获取其名称。DaysOfWeek只是枚举的一个示例。它应该是一个函数Enum不能像t一样。Enum是一个特殊的类。你读到所有代码都经过测试并且工作正常了吗?嗯,我刚刚更新了我的VS,它工作了!非常感谢。DaysOfWeek只是枚举的一个示例。它应该是一个函数Enum不能像t一样。Enum是一个特殊的类。你读到所有代码都经过测试并且工作正常了吗?嗯,我刚刚更新了我的VS,它工作了!非常感谢。不,你不能那样做。它向我显示的错误是:为枚举提供基类。约束不能为特殊类“Enum”更新答案。如果不能使用Enum泛型约束,则使用较旧版本的C#。这适用于较新版本的C#,但实际上应该将
TEnum
约束为
Enum
struct
。如果无法使用最新版本的C#,请将
TEnum
约束为
struct
,并在强制转换为
Enum
失败时抛出,否则无法执行此操作。它向我显示的错误是:为枚举提供基类。约束不能为特殊类“Enum”更新答案。如果不能使用Enum泛型约束,则使用较旧版本的C#。这适用于较新版本的C#,但实际上应该将
TEnum
约束为
Enum
struct
。如果无法使用最新版本的C#,请将
TEnum
约束为
struct
,并在转换为
Enum
失败时抛出
public void ShowEnum<TEnum>()
    where TEnum : Enum
{
    foreach (var enumValue in Enum.GetValues(typeof(TEnum)))
    {
        Console.WriteLine($"{(int)enumValue} - {enumValue}");
    }
}
ShowEnum<DaysOfWeek>();
public void ShowEnum<TEnum>()
    where TEnum : struct, IConvertible
{
    if (!typeof(TEnum).IsEnum) 
    {
        throw new ArgumentException("TEnum is not an enum");
    }

    foreach (var enumValue in Enum.GetValues(typeof(TEnum)))
    {
        Console.WriteLine($"{(int)enumValue} - {enumValue}");
    }
}
public static void ShowEnum<T>() where T : Enum
{
    foreach (var t in (T[])Enum.GetValues(typeof(T)))
    {
        Console.WriteLine($"{Enum.Format(typeof(T), t, "d")} - {t}");
    }
}