c# 对枚举的反射

今天需要一个对枚举的反射,获取值和名称。

只需要这样:

1
2
3
4
foreach (var item in Enum.GetValues(typeof(SignalFormat)))
           {
               Console.WriteLine(Convert.ToInt32(item) + "---->" + item.ToString());
           }

  item就是名称,将名称转换成int就是值。

 

还有一种方式

复制代码
public static class AttributeHelper
    {
        public static string GetCustomAttributeValue(this DistributeTaskState em)
        {
            Type tp = em.GetType();
            object obj = Activator.CreateInstance(tp);
            List<string> list = new List<string>();
            foreach (var item in tp.GetFields())
            {
                if (item.IsDefined(typeof(RemarkAttribute), true))
                {
                    RemarkAttribute remarkAttribute = (RemarkAttribute)item.GetCustomAttribute(typeof(RemarkAttribute), true);
                    string val = item.GetRawConstantValue().ToString();//
                    string name = item.Name;//字段(键)
                    string v = item.ToString();
                    list.Add(remarkAttribute.GetRemark());
                    return remarkAttribute.GetRemark();
                }
            }

            return "";
        }
    }
复制代码

上面这种方式是集合了特性和反射的。

posted @   游园惊梦、  阅读(1441)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
点击右上角即可分享
微信分享提示