c#添加中⽂描述给enum_C#中的枚举(Enum)你知道多少
呢?
枚举(Enum)定义
enum关键字⽤于声明枚举,即⼀种由⼀组称为枚举数列表的命名常量组成的独特类型。通常情况下,最好是在命名空间内直接定义枚举,以便该命名空间中的所有类都能够同样⽅便地访问它。但是,还可以将枚举嵌套在类或结构中。现在的有些电商⽹站根据购物的积分⽤到的,⾦牌会员,银牌会员,铜牌会员.enumMemberLevel
{
gold,
silver,
copper
}
枚举值获取
⼀般获取的时候包括获取变量和变量值,默认情况下,第⼀个枚举数的值为 0,后⾯每个枚举数的值依次递增 1。直接使⽤Enum中的静态⽅法即可操作.GetValues中获取的是枚举变量的值,类型是枚举名,之后⾃动输出的是枚举
名.strings=Enum.GetName(typeof(MemberLevel),3);
Console.WriteLine(s);
Console.WriteLine("MemberLevel中的值:");
foreach(intiinEnum.GetValues(typeof(MemberLevel)))
Console.WriteLine(i);
Console.WriteLine("MemberLevel中的值(注意类型):");
foreach(MemberLeveliinEnum.GetValues(typeof(MemberLevel)))
Console.WriteLine(i);
Console.WriteLine("MemberLevel中的变量:");
foreach(stringstrinEnum.GetNames(typeof(MemberLevel)))
Console.WriteLine(str);
System.Console.Read();
枚举类型
曾经很长的⼀段时间⾃⼰⼀度以为枚举的值只能是int类型,其实每种枚举类型都有基础类型,该类型可以是除 char以外的任何整型(重点)。枚举元素的默认基础类型为 int.准许使⽤的枚举类型有byte、sbyte、short、ushort、int、uint、long 或 ulong。如果枚举值为long,如下所⽰:enumMemberLevel:long
{
gold=2147483648L,
silver=232L,
copper=10L
}
枚举Flags和Description特性值
可以使⽤枚举类型定义位标志,从⽽使该枚举类型的实例可以存储枚举数列表中定义的值的任意组合。创建位标志枚举的⽅法是应⽤System.FlagsAttribute特性并适当定义⼀些值,以便可以对这些值执⾏AND、OR、NOT和XOR按位运算。⼀般情况下如果零值不表
⽰“未设置任何标志”,则请不要为标志指定零值.[Flags]
enumMemberLevel
{
[Description("⼆进制表⽰为1----0001")]
gold=0x1,
[Description("⼆进制表⽰为4----0010")]
silver=0x04,
[Description("⼆进制表⽰为16----0100")]
copper=0x10
}
程序运⾏如下所⽰://0001(Gold)and0100(silver)=>0101(5).
ld|MemberLevel.silver;
Console.WriteLine(options);
Console.WriteLine((int)options);
System.Console.Read();
上⾯的基本上属于⼊门的知识,在项⽬中通常⽤到的是在枚举变量上⾯加上Description,需要显⽰的枚举的特性值,枚举的值⼀般为int在数据库中占⽤空间⽐较⼩,枚举的变量⽤于给数据库中的字段赋值,那么如果要显⽰字段就需要考虑到Descripttion特性,显⽰中⽂名称,例如⼀个⽤户的的等级在数
据中存储的是1,显⽰的时候显⽰为⾦牌⽤户,当然也可以使⽤switch,if..else..去判断,如果枚举⽐较多,⾃⼰写的也很不爽.特性这个时候刚发挥作⽤了,如下所⽰:[Description("会员等级")]
enumMemberLevel
{writeline输出数值变量
[Description("⾦牌会员")]
gold=1,
[Description("银牌会员")]
silver=2,
[Description("铜牌会员")]
copper=3
}
⾸先来写⼀个扩展,静态类,静态⽅法,this关键字,istop主要是⽤来获取枚举上⾯的描述.publicstaticclassEnumHelper
{
///
///返回枚举项的描述信息。
///
///要获取描述信息的枚举项。
///枚举想的描述信息。
publicstaticstringGetDescription(thisEnumvalue,boolisTop=false)
{
TypeenumType=value.GetType();
DescriptionAttributeattr=null;
if(isTop)
{
attr=(DescriptionAttribute)Attribute.GetCustomAttribute(enumType,typeof(DescriptionAttribute));
}
else
{
//获取枚举常数名称。
stringname=Enum.GetName(enumType,value);
if(name!=null)
{
//获取枚举字段。
FieldInfofieldInfo=enumType.GetField(name);
if(fieldInfo!=null)
{
//获取描述的属性。
attr=Attribute.GetCustomAttribute(fieldInfo,typeof(DescriptionAttribute),false)asDescriptionAttribute; }
}
}
if(attr!=null&&!string.IsNullOrEmpty(attr.Description))
returnattr.Description;
else
returnstring.Empty;
}
}
主程序调⽤如下所⽰:ld;
Console.WriteLine(gold.GetDescription());
System.Console.Read();
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论