c# 设计一个遍历一个类所有enum的方法
如图,我一个类里面全是enum,现想实现在winform窗体里修改enum里面的值,也就是相当于把他们做成一个一个的table,然后摆在winform窗体上,当修改完毕后...
如图,我一个类里面全是enum,现想实现在winform窗体里修改enum里面的值,也就是相当于把他们做成一个一个的table,然后摆在winform窗体上,当修改完毕后,点击winform窗体上的修改按钮,则全部修改,这种效果怎么实现?
展开
2017-04-27 · 知道合伙人软件行家
关注
展开全部
枚举遍历
public enum EMyType
{
[System.ComponentModel.Description("A类型")]
TypeA = 1,
[System.ComponentModel.Description("B类型")]
TypeB = 1,
[System.ComponentModel.Description("C类型")]
TypeC = 2,
}
接着遍历其枚举名的方法是
foreach (var name in Enum.GetNames(typeof(EMyType)))
{
Console.WriteLine(name);
}
接着遍历其枚举名与枚举值的方法是
foreach (var value in Enum.GetValues(typeof(EMyType)))
{
Console.WriteLine(string.Format("{0}={1}", value.ToString(), Convert.ToInt32(value)));
}
接着遍历其枚举名,枚举值与描述属性的字符串的方法是
foreach (var value in Enum.GetValues(typeof(EMyType)))
{
object[] objAttrs = value.GetType().GetField(value.ToString()).GetCustomAttributes(typeof(DescriptionAttribute), true);
if (objAttrs != null &&
objAttrs.Length > 0)
{
DescriptionAttribute descAttr = objAttrs[0] as DescriptionAttribute;
Console.WriteLine(string.Format("[{0}]", descAttr.Description));
}
Console.WriteLine(string.Format("{0}={1}", value.ToString(), Convert.ToInt32(value)));
}
枚举反射,根据枚举中的val或者data读取值和描述
举例实用:
1 Type t = Assembly.Load("XXX.SDK").GetType("XXX.SDK.Entities." + ObjType);
2 var dataList = new List<object>();
3 foreach (var value in Enum.GetValues(t))
4 {
5
6 object[] objAttrs = value.GetType().GetField(value.ToString()).GetCustomAttributes(typeof(DescriptionAttribute), true);
7 DescriptionAttribute descAttr = objAttrs[0] as DescriptionAttribute;
8 var date = new
9 {
10 Description = descAttr.Description,
11 Name = value.ToString(),
12 value = Convert.ToInt32(value)
13 };
14 dataList.Add(date);
15 }
根据枚举的名字,读出枚举的描述,内容和值。
UserCardStatus userCardStatu = (UserCardStatus)Enum.Parse(typeof(UserCardStatus), result.user_card_status, true);
string txt = GetEnumDescription(userCardStatu);
public string GetEnumDescription(Enum enumValue)
{
string str = enumValue.ToString();
FieldInfo field = enumValue.GetType().GetField(str);
object[] objs = field.GetCustomAttributes(typeof(DescriptionAttribute), false);
if (objs == null || objs.Length == 0) return str;
DescriptionAttribute da = (DescriptionAttribute)objs[0];
return da.Description;
}
根据枚举的单个内容,读出描述
public enum EMyType
{
[System.ComponentModel.Description("A类型")]
TypeA = 1,
[System.ComponentModel.Description("B类型")]
TypeB = 1,
[System.ComponentModel.Description("C类型")]
TypeC = 2,
}
接着遍历其枚举名的方法是
foreach (var name in Enum.GetNames(typeof(EMyType)))
{
Console.WriteLine(name);
}
接着遍历其枚举名与枚举值的方法是
foreach (var value in Enum.GetValues(typeof(EMyType)))
{
Console.WriteLine(string.Format("{0}={1}", value.ToString(), Convert.ToInt32(value)));
}
接着遍历其枚举名,枚举值与描述属性的字符串的方法是
foreach (var value in Enum.GetValues(typeof(EMyType)))
{
object[] objAttrs = value.GetType().GetField(value.ToString()).GetCustomAttributes(typeof(DescriptionAttribute), true);
if (objAttrs != null &&
objAttrs.Length > 0)
{
DescriptionAttribute descAttr = objAttrs[0] as DescriptionAttribute;
Console.WriteLine(string.Format("[{0}]", descAttr.Description));
}
Console.WriteLine(string.Format("{0}={1}", value.ToString(), Convert.ToInt32(value)));
}
枚举反射,根据枚举中的val或者data读取值和描述
举例实用:
1 Type t = Assembly.Load("XXX.SDK").GetType("XXX.SDK.Entities." + ObjType);
2 var dataList = new List<object>();
3 foreach (var value in Enum.GetValues(t))
4 {
5
6 object[] objAttrs = value.GetType().GetField(value.ToString()).GetCustomAttributes(typeof(DescriptionAttribute), true);
7 DescriptionAttribute descAttr = objAttrs[0] as DescriptionAttribute;
8 var date = new
9 {
10 Description = descAttr.Description,
11 Name = value.ToString(),
12 value = Convert.ToInt32(value)
13 };
14 dataList.Add(date);
15 }
根据枚举的名字,读出枚举的描述,内容和值。
UserCardStatus userCardStatu = (UserCardStatus)Enum.Parse(typeof(UserCardStatus), result.user_card_status, true);
string txt = GetEnumDescription(userCardStatu);
public string GetEnumDescription(Enum enumValue)
{
string str = enumValue.ToString();
FieldInfo field = enumValue.GetType().GetField(str);
object[] objs = field.GetCustomAttributes(typeof(DescriptionAttribute), false);
if (objs == null || objs.Length == 0) return str;
DescriptionAttribute da = (DescriptionAttribute)objs[0];
return da.Description;
}
根据枚举的单个内容,读出描述
展开全部
enum是结构的一种,表示的是不可变的内容
不建议你对enum做修改
如果你要修改这些数据,建议你把它们存在数据库中做持久化,然后用数据库的增删改查来操作这些数据
不建议你对enum做修改
如果你要修改这些数据,建议你把它们存在数据库中做持久化,然后用数据库的增删改查来操作这些数据
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
按你的需求,个人觉的你完全不需要用到enum(这东西设计出来就是做为固定值用的,你要动态创建修改虽然不是不可以但完全没必要),你的需求直接用字典就行了,比如说有字典
Dictionary<string,Dictionary<string,int>> dic=new Dictionary<string,Dictionary<string,int>>();
Dictionary<string,int> temp=new Dictionary<string,int>();
temp.Add("No",3910);temp.Add("Count",35);
dic.Add("Alarm",temp);
//这样你获取或修改count就可以用比如dic["Alarm"]["Count"]或者dic["Alarm"]["Count"]=20
至于Dictionary怎么遍历这是基础内容了,自己搜索下就知道了
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询