.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.

posted on 2013-09-14 22:22  凝冰  阅读(182)  评论(0编辑  收藏  举报