700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 详解C# 枚举高级用法之Description

详解C# 枚举高级用法之Description

时间:2023-10-26 12:58:05

相关推荐

详解C# 枚举高级用法之Description

基础枚举

namespace TestEnum{//声明public enum Name{//默认值 boob = 0 ,依次往下排,可自定义 jackMa = 3,jackCHan那就= 4boob,JackMa,JackChan,//Lisa,Poro}}

声明枚举,调用。

几个常用的转换不做介绍,一嗦一大堆。

enum转stringenum 转intstring转enum整型转enum

高级点用法,反射元数据

public enum Name{[Description("鲍勃")]boob,[Description("马宇")]JackMa,[Description("陈龙")]JackChan,[Description("丽莎")]Lisa,[Description("保罗")]Poro}

加了Description,就可以通过反射来访问这些数据

如何访问?

using System;using ponentModel;namespace TestEnum{//基础枚举public enum Name{[Description("鲍勃")]boob,[Description("马宇")]JackMa,[Description("陈龙")]JackChan,[Description("丽莎")]Lisa,[Description("保罗")]Poro}//主要这个GetDescription()方法,看不懂没关系,如何调用static class EnumExtensions{public static string GetDescription(this Enum val){var field = val.GetType().GetField(val.ToString());var customAttribute = Attribute.GetCustomAttribute(field, typeof(DescriptionAttribute));return customAttribute == null ? val.ToString() : ((DescriptionAttribute)customAttribute).Description;}}}

调用

string str = Name.boob.GetDescription();//需要调用的地方调用

一个特性不够,能再加一个吗?

可以

加一个继承自Attribute 的类

public class DataTest : Attribute{public string Data {get; set; }public DataTest(string data){Data = data;}public DataTest(){}}

加完了自定义特性后你就会发现可以加了。。

[Description("鲍勃")][DataTest("中文3级")]boob,[Description("马宇")][DataTest("中文2级")]JackMa,[Description("陈龙")][DataTest("中文1级")]JackChan,[Description("丽莎")][DataTest("中文2级")]Lisa,[Description("保罗")][DataTest("中文2级")]Poro

就变成了这样

访问也得加一个

public static string GetData(this Enum val){var field = val.GetType().GetField(val.ToString());var customAttribute = Attribute.GetCustomAttribute(field, typeof(DataTest));return customAttribute == null ? val.ToString() : ((DataTest)customAttribute).Data;}

调用

string str = Name.boob.GetDescription();string DStr = Name.boob.GetData();

以上就是enum 加+自定义特性

不够可以随时自己加。

可以测试玩玩,据说反射浪费资源。

完整代码

using System;using ponentModel;namespace TestEnum{//基础枚举public enum Name{[Description("鲍勃")][DataTest("中文3级")]boob,[Description("马宇")][DataTest("中文2级")]JackMa,[Description("陈龙")][DataTest("中文1级")]JackChan,[Description("丽莎")][DataTest("中文2级")]Lisa,[Description("保罗")][DataTest("中文2级")]Poro}public class DataTest : Attribute{public string Data {get; set; }public DataTest(string data){Data = data;}public DataTest(){}}static class EnumExtensions{public static string GetDescription(this Enum val){var field = val.GetType().GetField(val.ToString());var customAttribute = Attribute.GetCustomAttribute(field, typeof(DescriptionAttribute));return customAttribute == null ? val.ToString() : ((DescriptionAttribute)customAttribute).Description;}public static string GetData(this Enum val){var field = val.GetType().GetField(val.ToString());var customAttribute = Attribute.GetCustomAttribute(field, typeof(DataTest));return customAttribute == null ? val.ToString() : ((DataTest)customAttribute).Data;}}}

PS:可以声明obect类型Attribute.子类。 那。。。。。可发挥空间就大了。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。