枚举设置为字符串并在需要时获取刺痛值

本文关键字:获取 设置 字符 字符串 串并 枚举 | 更新日期: 2023-09-27 18:32:55

我不知道该怎么做
我想要如下代码

enum myenum
{
    name1 = "abc",
    name2 = "xyz"
}

并检查它

if (myenum.name1 == variable)

我该怎么做这些事情?

谢谢。

枚举设置为字符串并在需要时获取刺痛值

不幸的是,

这是不可能的。 枚举只能有一个基本的底层类型(intuintshort等)。 如果要将枚举值与其他数据相关联,请将属性应用于这些值(例如DescriptionAttribute )。

public static class EnumExtensions
{
    public static TAttribute GetAttribute<TAttribute>(this Enum value)
        where TAttribute : Attribute
    {
        var type = value.GetType();
        var name = Enum.GetName(type, value);
        return type.GetField(name)
            .GetCustomAttributes(false)
            .OfType<TAttribute>()
            .SingleOrDefault();
    }
    public static String GetDescription(this Enum value)
    {
        var description = GetAttribute<DescriptionAttribute>(value);
        return description != null ? description.Description : null;
    }
}
enum MyEnum
{
    [Description("abc")] Name1,
    [Description("xyz")] Name2,
}
var value = MyEnum.Name1;
if (value.GetDescription() == "abc")
{
    // do stuff...
}

根据这里,你正在做的事情是不可能的。你可以做的可能是拥有一个充满常量的静态类,也许是这样的:

class Constants
{
    public static string name1 = "abc";
    public static string name2 = "xyz";
}
...
if (Constants.name1 == "abc")...

根据您要执行的操作,也许您可以通过使用字典而不是enum来达到相同的效果。

这之前在这里讨论过,但找不到。简短版本:不能为枚举成员提供字符串值。可以使用成员名称作为值,但通常这不是您想要的。请点击此链接获取如何使用属性将字符串值注释给枚举成员的指南。

很好的答案在这里。详细说明建议的答案是,您是否希望获得给定枚举描述的枚举值。我还没有测试过这个,但这可能有效:

枚举 :

public enum e_BootloadSource : byte
{
    [EnumMember]
    [Display(Name = "UART")]
    [Description("UART_BL_RDY4RESET")]
    UART = 1,
    [EnumMember]
    [Display(Name = "SD")]
    [Description("SD_BL_RDY4RESET")]
    SD = 2,
    [EnumMember]
    [Display(Name = "USB")]
    [Description("USB_BL_RDY4RESET")]
    USB = 3,
    [EnumMember]
    [Display(Name = "Fall Through Mode")]
    [Description("FALL_THRGH_BL_RDY4RESET")]
    FALL_THROUGH_MODE = 4,
    [EnumMember]
    [Display(Name = "Cancel Bootload")]
    [Description("BL_CANCELED")]
    CANCEL_BOOTLOAD = 5,
}

使用方法如下:

foreach(e_BootloadSource BLSource in Enum.GetValues(typeof(e_BootloadSource)))
                    {
                        if (BLSource.GetDescription() == inputPieces[(int)SetBLFlagIndex.BLSource])
                        {
                            newMetadata.BootloadSource = BLSource;
                        }
                    }

注意 inputpieces 纯粹是一个字符串数组,newMetadata.BootloadSource 是e_BootloadSource。