c# 设计一个遍历一个类所有enum的方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c# 设计一个遍历一个类所有enum的方法相关的知识,希望对你有一定的参考价值。

如图,我一个类里面全是enum,现想实现在winform窗体里修改enum里面的值,也就是相当于把他们做成一个一个的table,然后摆在winform窗体上,当修改完毕后,点击winform窗体上的修改按钮,则全部修改,这种效果怎么实现?

枚举遍历
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;


根据枚举的单个内容,读出描述
参考技术A enum是结构的一种,表示的是不可变的内容
不建议你对enum做修改
如果你要修改这些数据,建议你把它们存在数据库中做持久化,然后用数据库的增删改查来操作这些数据
参考技术B

按你的需求,个人觉的你完全不需要用到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怎么遍历这是基础内容了,自己搜索下就知道了

本回答被提问者采纳

C#遍历指定文件夹中所有文件的3种方法

    前段时间小编同事面试遇到了这个问题,由于同事比较菜并未很完美的完成这个问题,本文就替小编来解答一下。在C#中有多种方式类遍历指定文件夹中的文件,本文将介绍三种方式。

一、使用Directory类的GetFiles方法:

示例代码如下:

string[] files = Directory.GetFiles(folderPath, "*.*", SearchOption.AllDirectories);
foreach (string file in files)    // 处理每个文件

此方法简单易用,一行代码就可以完成遍历,适用于小型文件夹。但缺点是对于大型文件夹,GetFiles方法会遍历整个文件夹并返回一个包含所有文件的数组,可能导致性能问题。

二、使用DirectoryInfo类:

示例代码如下:

DirectoryInfo folder = new DirectoryInfo(folderPath);
foreach (FileInfo file in folder.GetFiles("*.*", SearchOption.AllDirectories))
   
 // 处理每个文件

//欢迎关注公众号“DOTNET开发跳槽”,关注可获得海量面试题

使用FileInfo对象来代表每个文件,可以获取更多文件属性,适用于大型文件夹。缺点是相比GetFiles方法略显冗长,不够简洁。

三、使用File类和Directory类的GetDirectories方法:

使用示例:

foreach (string directory in Directory.GetDirectories(folderPath, "*", SearchOption.AllDirectories))
  
  foreach (string file in Directory.GetFiles(directory))    
     
   // 处理每个文件    

这种方案是可以在遍历子文件夹时遍历指定深度,适用于想要完全控制遍历程度的情形。缺点是相比其他两种方法较为复杂,需要嵌套循环遍历。

结语:

    本文讲述了C#遍历指定文件夹中所有文件的3种方法,也替小编同事解决了疑问,以上三种遍历文件夹的方法各有优缺点,根据实际需求来选择使用哪种方法。如果只是遍历小型文件夹,可以选择GetFiles方法;如果需要遍历大型文件夹或获取更多文件属性,应该选择DirectoryInfo类;如果想要完全控制遍历程度,应该使用GetDirectories方法。希望本文对你有所收获,同时欢迎留言吐槽。

来源公众号:“dotnet开发跳槽”

以上是关于c# 设计一个遍历一个类所有enum的方法的主要内容,如果未能解决你的问题,请参考以下文章

java之枚举和注解

C#遍历指定文件夹中所有文件的3种方法

C# Dictionary 的遍历方法

C#如何遍历一个文件夹下面所有的文件

C# 遍历类属性

foreach 循环不会遍历列表中的所有项目 - C#