C#枚举总结和其扩展用法(通过枚举描设置枚举值)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C#枚举总结和其扩展用法(通过枚举描设置枚举值),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2579字,纯文字阅读大概需要4分钟。
内容图文
![C#枚举总结和其扩展用法(通过枚举描设置枚举值)](/upload/InfoBanner/zyjiaocheng/1061/f26d2402c57e4c51967f99ef5a87376e.jpg)
C#中枚举是一个非常好用的类型,用会了之后确实方便了很多。
项目中一个枚举类型:
public enum Version_Type : byte { [Description("1997版")] 版本1997 = 0 , [Description("2007版")] 版本2007 }
枚举类型的默认类型是int型,可以改变其使用的类型,需要用(: <type>)来进行设置,上例中<type>为byte,也可以用其它类型(byte,sbyte,short,ushort,int,uint,long,ulong)
访问控制符不可以为private,protected或者protected internal
枚举有描述,枚举变量,枚举值。
枚举描述可以没有,需要声明如上例需要加上引用 using System.ComponentModel;
枚举变量不允许特殊字符(-,空格或者括号之类的(具体的以后补充)),允许使用下划线(_)不能以数字开头。因为枚举变量名称这些限制,所以有时候需要用描述来进行处理(如上例中枚举变量必须使用字符开头,所有需要对用户显示版本信息的时候“1997版”就不能直接当枚举变量,只能使用“版本1997”,有人说这样也能接受啊,但是当要有其它说明的时候比如有空格之类的特殊说明性文字就没法转换了。在C#利用反射动态根据传入属性创建对应控件文章中动态传入枚举,然后列出所有枚举项名称,因为枚举名称限制,所以后来改成了列出所有描述,然后选择描述名称,通过描述名称设置枚举值,即后文将介绍的枚举的扩展用法)
枚举值自己定义,可以从零开始(默认也是0),下一个变量如果没有指定值则为上一个变量值+1,如上例中“版本2007”的值为1.
枚举转换:
1 Version_Type myVersion = Version_Type.版本1997; 2byte version = (byte)myVersion;//获取值3 myVersion = (Version_Type )version;//获取枚举4string versionName = myVersion.ToString();//获取枚举名称5 versionName = Convert.ToString(myVersion);//获取枚举名称和上一个一样6string versionName1 = "版本2007"; 7 Version_Type myVersion1 = (Version_Type )Enum.Parse(typeof(Version_Type),versionName1);//通过枚举名称获取枚举
枚举扩展用法,通过枚举描述设置枚举值:
这个方法关键还是对枚举描述和枚举变量进行记录。
创建一个Dictionary全局对象:
private Dictionary<int,Dictionary<string,string>> enumValue;
int是用来存放属性索引,表示第i个属性。中间的Dictionary用来存放枚举描述和枚举变量名称,一一对应!
Type t = spec.GetType();//获取类型for(int i=0;i<GetProperties().Getlength(0);i++) { string text = pi.GetValue(spec,null).ToString(); //其它执行代码 .... //如果是枚举类型if(pi.PropertyType.BaseType.Name == "Enum") { //创建ComboBoxCell ... //创建Dictionary 记录描述和属性的键值对 Dictionary<string,string> itemEnum = new Dictionary<string,string>(); //属性添加到 ComboBoxCell中foreach(var fi in pi.PropertyType.GetFields(BindingFlags.Static | BindingFlags.Public)) { /********上篇文章用法********** string text = fi.Name; //text添加到控件中 ****************************/object[] objs = fi.GetCustomAttributes(typeof(System.ComponentModel.DescriptionAttribute),false); if(objs != null) { //获取描述string strDescription = ((System.ComponentModel.DescriptionAttribute)objs[0]).Description; //添加描述到控件中 ... //集合中添加简直对 itemEnum.Add(strDescription,fi.Name); continue; } //如果没有描述的情况string strText = fi.Name; //就用属性自己构成键值对 itemEnum.Add(strText,strText); } EnumValue.Add(i,itemEnum);
} }
当DataGridView中某一项改变的时候,在CellValidating事件处理函数中取出索引,取出要改变的值
string strValue = e.FormattedValue.ToString(); int index = e.RowIndex; string strValueSet = ""; //获取描述对应的枚举属性if(EnumValue.ContainsKey(index)) { strValueSet = EnumValue[index][strValue]; } //后面修改值代码
原文:http://www.cnblogs.com/Iamsorry/p/4776432.html
内容总结
以上是互联网集市为您收集整理的C#枚举总结和其扩展用法(通过枚举描设置枚举值)全部内容,希望文章能够帮你解决C#枚举总结和其扩展用法(通过枚举描设置枚举值)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。