zoukankan      html  css  js  c++  java
  • .net 反射初体验

    一.获取对象中的所有属性

    Type是.net定义的一个反射的类。通过反射获取到对象的所有属性,然后根据属性获取对象对应属性所对应的值。

    使用PropertyInfo,请引用命名空间using System.Reflection;

    1、首先定义一个对象People

     1  /// <summary>
     2     /// 定义一个People类
     3     /// </summary>
     4     public class People
     5     {
     6         /// <summary>
     7         /// 省份证号
     8         /// </summary>
     9         public string CartId { get; set; }
    10         /// <summary>
    11         /// 名字
    12         /// </summary>
    13         public string Name { get; set; }
    14         /// <summary>
    15         /// 出生日期
    16         /// </summary>
    17         public DateTime BirthDay { get; set; }
    18         /// <summary>
    19         /// 性别
    20         /// </summary>
    21         public string Sex { set; get; }
    22     }
    View Code

    2、对象初始化

         //利用对象初始化器初始化对象
                People people = new People
                {
                    CartId = "5342323123124124124",
                    Name = "zhangsan",
                    BirthDay = new DateTime(1990, 9, 11),
                    Sex = "男"
                };

    3、获取属性值

        //获取Name属性的值
                Console.WriteLine(type.GetProperty("Name").GetValue(people, null));

    4、调用对应属性的值

     1  static void Main(string[] args)
     2         {
     3         //利用对象初始化器初始化对象
     4             People people = new People
     5             {
     6                 CartId = "5342323123124124124",
     7                 Name = "zhangsan",
     8                 BirthDay = new DateTime(1990, 9, 11),
     9                 Sex = ""
    10             };
    11             //获取People的数据类型
    12             Type type = people.GetType();
    13         //获取对象的所有属性
    14             PropertyInfo[] properties = type.GetProperties();
    15         //获取Name属性的值
    16             Console.WriteLine(type.GetProperty("Name").GetValue(people, null));
    17         //获取所有属性的名称和对应的值
    18             foreach (var pro in properties)
    19             {
    20         //属性的名称
    21                 Console.WriteLine(pro.Name);
    22         //属性对应的值
    23                 Console.WriteLine(pro.GetValue(people, null));
    24             }
    25             Console.ReadKey();
    26         }
    View Code

     实例:

    对于Linq的数据导出成Excel

    首先对于var q =from m in dbContext.Pepples

            where m.Sex=="男"

            select new{

              姓名=m.Name,

              省份证号=m.CartId,

              出生日期=m.BirthDay,

              性别=m.Sex

            };

    我们得到的q是一个IEnumerable<T>类型的数据.对于这种数据我们一般都是可以使用.ToList()将其转化为范型集合来处理。

    我们怎么样将数据导出的呢?

    首先定义一个函数

     1   /// <summary>
     2         /// 导出数据源
     3         /// </summary>
     4         /// <param name="list">数据源</param>
     5         public static void OutPutList<T>(List<T> list)
     6         {
     7             XlsDocument xls = new XlsDocument();
     8             Worksheet sheet = xls.Workbook.Worksheets.Add("数据表");
     9             //获取数据的类型
    10             Type type = list[0].GetType();
    11             PropertyInfo[] properties = type.GetProperties();
    12             //获取模型的所有属性(名称)
    13             for (int i = 0; i < properties.Length; i++)
    14             {
    15                 sheet.Cells.Add(1, i + 1, properties[i].Name);
    16             }
    17 
    18             //将数据写入到Excel
    19             for (int j = 0; j < list.Count; j++)
    20             {
    21                 type = list[j].GetType();
    22                 properties = type.GetProperties();
    23                 for (int i = 0; i < properties.Length; i++)
    24                 {
    25                      //获取对应属性的对应值
    26                     sheet.Cells.Add(j + 2, i + 1, properties[i].GetValue(list[j], null));
    27                 }
    28             }
    29 
    30             //写入数据库
    31             xls.FileName = "FF_" + DateTime.Now.ToString("yyyyMMddHHmmss");
    32             xls.Send();
    33         }


    这种方法的缺点就是不能按照想要的顺序导出成EXCEL.

  • 相关阅读:
    指针
    《算法图解》3
    《算法图解》2
    Python缩进
    linux_01_seq_shuf_sort
    centos yum 切换阿里源
    Python csv 跳过第一行 去除表头 读取文件内容
    C语言结构体内存分析
    shell csv导入mysql ERROR 1292 (22007) at line 1: Incorrect datetime value: '' for column 解决方案
    代码实现:数据结构之数组当中唯一的k个数 k=1,2
  • 原文地址:https://www.cnblogs.com/binglab/p/3321873.html
Copyright © 2011-2022 走看看