📜  获取枚举名称 - C# (1)

📅  最后修改于: 2023-12-03 14:57:16.491000             🧑  作者: Mango

获取枚举名称 - C#

在C#中,我们可以通过以下方式获取枚举的名称:

var enumName = Enum.GetName(typeof(MyEnum), MyEnum.Value);

其中,MyEnum是我们定义的枚举类型,Value是该枚举类型中的某个值。这个方法会返回这个值所属的枚举类型的名称,如果该值不存在于该枚举类型中,则返回null

如果我们需要获取枚举中所有的名称,可以使用Enum.GetNames方法:

var enumNames = Enum.GetNames(typeof(MyEnum));

这个方法会返回一个string数组,其中包含该枚举类型中所有的名称。

同时,我们可以使用typeof(MyEnum).GetEnumNames()方法来获取所有枚举名称的字符串数组,该方法与Enum.GetNames()方法的效果是一样的。

需要注意的是,Enum.GetNameEnum.GetNames方法都是静态方法,可以直接通过枚举类型进行访问。

在使用枚举类型的时候,我们也可以通过ToString()方法来获取该枚举值的名称:

var enumName = MyEnum.Value.ToString();

需要注意的是,如果我们定义的枚举类型有对应的Description特性,那么我们可以利用这个特性来获取枚举值的自定义名称。下面是一个示例:

public enum MyEnum
{
    [Description("第一个值")]
    Value1,
    [Description("第二个值")]
    Value2,
    [Description("第三个值")]
    Value3
}

public static class Extensions
{
    public static string GetDescription(this Enum value)
    {
        var field = value.GetType().GetField(value.ToString());
        if (field == null) return null;
        var attribute = Attribute.GetCustomAttribute(field, typeof(DescriptionAttribute)) as DescriptionAttribute;
        return attribute?.Description;
    }
}

var enumName = MyEnum.Value1.GetDescription(); // 返回 "第一个值"

上面的示例中,我们为枚举类型MyEnum的每个枚举值添加了Description特性,然后定义了一个扩展方法GetDescription来获取这个特性的值,这样我们就可以在需要的时候获取自定义的枚举值名称。需要注意的是,GetDescription方法是一个扩展方法,我们需要先引入了Extensions类才能够进行调用。

总结一下,获取枚举名称在C#中非常简单,我们可以通过Enum.GetNameEnum.GetNames、枚举值的ToString()方法等方式来获取。如果需要获取自定义的枚举值名称,则可以使用Description特性来实现。