IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发工具 -> C#中特性(Attribute)的使用 -> 正文阅读

[开发工具]C#中特性(Attribute)的使用

1.特性是一个类,它继承于Attribute。它对程序中的元素进行标注,如类型、字段、方法和属性等。
Attribute是程序代码的一部分,它不会被编译器丢弃,而且还会被编译器编译进程序集(Assembly)的元数据(Metadata)里。

  [AttributeUsage(AttributeTargets.Field | AttributeTargets.Property)] //表示该特性可以修饰字段,属性 、(Class、Method)可修饰类、方法
    public class FieldForExportAttribute : Attribute
    {
        /// <summary>
        /// 标记导出属性
        /// </summary>
        /// <param name="columnName">列名</param>
        /// <param name="sort">排序</param>
        /// <param name="tasktype">任务类型</param>
        public FieldForExportAttribute(string columnName, int sort = 0, int tasktype = 0)
        {
            ColumnName = columnName;
            Sort = sort;
            TaskType = tasktype;
        }

        public string ColumnName { get; }

        public int Sort { get; }

        public int TaskType { get; }
    }

2、新建类,给属性、字段标注

    /// 我的业务页面使用的公共查询响应实体
    /// </summary>
    public class UtoClass
    {
        /// <summary>
        /// 发起人id
        /// </summary>
        public string AccpetUserID { get; set; } //X
        /// <summary>
        /// 发起人姓名
        /// </summary>
        [FieldForExport("发起人",65)]
        public string AppProposer { get; set; }
        /// <summary>
        /// 办结时间//结束流程的时间
        /// </summary>
        [FieldForExport("办结时间",50)]
        public string EndedDateTime { get; set; }
        /// <summary>
        /// 当前环节ID/业务节点
        /// </summary>
        public string FunctionID { get; set; }
        
    }
List<KeyValuePair<string, string>> keyValuePairs = new List<KeyValuePair<string, string>>();
                var dt = GetTable(res, ref keyValuePairs,1);
 /// <summary>
        /// 返回的list数据转datatable
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="list"></param>
        /// <param name="keyValuePairs"></param>
        /// <param name="type">1.待办业务 2其他业务</param>
        /// <returns></returns>
        private DataTable GetTable<T>(List<T> list, ref List<KeyValuePair<string, string>> keyValuePairs,int taskType=0)
        {
            List<T> zz= list.OrderBy(x => x.GetType().GetProperty("name")).ToList();
            var dt = new DataTable("Datas");
            var type = typeof(T);
            var propertyInfos = (from p in type.GetProperties()
                                 let attr = p.GetCustomAttribute<FieldForExportAttribute>()
                                 where attr != null  
                                 && (attr.TaskType == 0 || attr.TaskType == taskType)
                                 orderby attr.Sort descending
                                 select p).ToList();
            dt.Columns.Add(new DataColumn("序列号", typeof(string)));
            keyValuePairs.Add(new KeyValuePair<string, string>("序列号", "序列号"));
            foreach (var item in propertyInfos)
            {
                var a = item.GetCustomAttribute<FieldForExportAttribute>();
                dt.Columns.Add(new DataColumn(a.ColumnName, typeof(string)));
                keyValuePairs.Add(new KeyValuePair<string, string>(a.ColumnName, a.ColumnName));
            }

            var index = 1;
            foreach (var item in list)
            {
                var dr = dt.NewRow();
                dr["序列号"] = index;
                foreach (var p in propertyInfos)
                {
                    var a = p.GetCustomAttribute<FieldForExportAttribute>();
                    dr[a.ColumnName] = p.GetValue(item)?.ToString();
                }
                dt.Rows.Add(dr);
                index++;
            }
            return dt;
        }
  开发工具 最新文章
Postman接口测试之Mock快速入门
ASCII码空格替换查表_最全ASCII码对照表0-2
如何使用 ssh 建立 socks 代理
Typora配合PicGo阿里云图床配置
SoapUI、Jmeter、Postman三种接口测试工具的
github用相对路径显示图片_GitHub 中 readm
Windows编译g2o及其g2o viewer
解决jupyter notebook无法连接/ jupyter连接
Git恢复到之前版本
VScode常用快捷键
上一篇文章      下一篇文章      查看所有文章
加:2022-04-28 12:03:57  更:2022-04-28 12:04:10 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 2:32:08-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码