我不知道怎么做这个我想要代码如下
enum myenum
{
name1 = "abc",
name2 = "xyz"
}
并检查
if (myenum.name1 == variable)
我该怎么办?
感谢名单。
答案 0 :(得分:14)
不幸的是,这是不可能的。枚举只能有基本的基础类型(int
,uint
,short
等。如果要将枚举值与其他数据相关联,请将属性应用于值(例如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...
}
答案 1 :(得分:4)
根据here,你所做的事是不可能的。你可以做的可能是有一个充满常量的静态类,也许是这样的:
class Constants
{
public static string name1 = "abc";
public static string name2 = "xyz";
}
...
if (Constants.name1 == "abc")...
答案 2 :(得分:0)
之前曾在此讨论,但无法找到它。简短版:你不能给枚举成员字符串值。您可以使用成员名称作为值,但通常这不是您想要的。请follow this link获取有关如何使用属性注释字符串值以枚举成员的指南。
答案 3 :(得分:0)
根据您的目的,使用Dictionary代替enum
可能会达到相同的效果。
答案 4 :(得分:0)
这里的答案很好。详细说明建议的答案是,如果您希望 获得枚举说明 的枚举值。我没有测试过这个,但这可能有用:
枚举:
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。