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

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

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

1、首先定义一个对象People

  /// <summary>
/// 定义一个People类
/// </summary>
public class People
{
/// <summary>
/// 省份证号
/// </summary>
public string CartId { get; set; }
/// <summary>
/// 名字
/// </summary>
public string Name { get; set; }
/// <summary>
/// 出生日期
/// </summary>
public DateTime BirthDay { get; set; }
/// <summary>
/// 性别
/// </summary>
public string Sex { set; get; }
}

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、调用对应属性的值

  static void Main(string[] args)
{
//利用对象初始化器初始化对象
People people = new People
{
CartId = "",
Name = "zhangsan",
BirthDay = new DateTime(, , ),
Sex = "男"
};
//获取People的数据类型
Type type = people.GetType();
//获取对象的所有属性
PropertyInfo[] properties = type.GetProperties();
//获取Name属性的值
Console.WriteLine(type.GetProperty("Name").GetValue(people, null));
//获取所有属性的名称和对应的值
foreach (var pro in properties)
{
//属性的名称
Console.WriteLine(pro.Name);
//属性对应的值
Console.WriteLine(pro.GetValue(people, null));
}
Console.ReadKey();
}

实例:

对于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()将其转化为范型集合来处理。

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

首先定义一个函数

   /// <summary>
/// 导出数据源
/// </summary>
/// <param name="list">数据源</param>
public static void OutPutList<T>(List<T> list)
{
XlsDocument xls = new XlsDocument();
Worksheet sheet = xls.Workbook.Worksheets.Add("数据表");
//获取数据的类型
Type type = list[].GetType();
PropertyInfo[] properties = type.GetProperties();
//获取模型的所有属性(名称)
for (int i = ; i < properties.Length; i++)
{
sheet.Cells.Add(, i + , properties[i].Name);
} //将数据写入到Excel
for (int j = ; j < list.Count; j++)
{
type = list[j].GetType();
properties = type.GetProperties();
for (int i = ; i < properties.Length; i++)
{
//获取对应属性的对应值
sheet.Cells.Add(j + , i + , properties[i].GetValue(list[j], null));
}
} //写入数据库
xls.FileName = "FF_" + DateTime.Now.ToString("yyyyMMddHHmmss");
xls.Send();
}

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

.net 反射初体验的更多相关文章

  1. PHP初体验

    PHP初体验 提笔写初体验总不知道从何说起,直接聊PHP中的函数.PHP网络技术.数据库操作.PHP模板等感觉又不是初体验.最后还是决定从PHP的面向对象.PHP的魔术方法.PHP的反射.PHP中的异 ...

  2. SpringBoot初体验及原理解析

    一.前言 ​ 上篇文章,我们聊到了SpringBoot得以实现的幕后推手,这次我们来用SpringBoot开始HelloWorld之旅.SpringBoot是Spring框架对“约定大于配置(Conv ...

  3. .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验

    不知不觉,“.NET平台开源项目速览“系列文章已经15篇了,每一篇都非常受欢迎,可能技术水平不高,但足够入门了.虽然工作很忙,但还是会抽空把自己知道的,已经平时遇到的好的开源项目分享出来.今天就给大家 ...

  4. Xamarin+Prism开发详解四:简单Mac OS 虚拟机安装方法与Visual Studio for Mac 初体验

    Mac OS 虚拟机安装方法 最近把自己的电脑升级了一下SSD固态硬盘,总算是有容量安装Mac 虚拟机了!经过心碎的安装探索,尝试了国内外的各种安装方法,最后在youtube上找到了一个好方法. 简单 ...

  5. Spring之初体验

                                     Spring之初体验 Spring是一个轻量级的Java Web开发框架,以IoC(Inverse of Control 控制反转)和 ...

  6. Xamarin.iOS开发初体验

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKwAAAA+CAIAAAA5/WfHAAAJrklEQVR4nO2c/VdTRxrH+wfdU84pW0

  7. 【腾讯Bugly干货分享】基于 Webpack & Vue & Vue-Router 的 SPA 初体验

    本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57d13a57132ff21c38110186 导语 最近这几年的前端圈子,由于 ...

  8. 【Knockout.js 学习体验之旅】(1)ko初体验

    前言 什么,你现在还在看knockout.js?这货都已经落后主流一千年了!赶紧去学Angular.React啊,再不赶紧的话,他们也要变out了哦.身旁的90后小伙伴,嘴里还塞着山东的狗不理大蒜包, ...

  9. 在同一个硬盘上安装多个 Linux 发行版及 Fedora 21 、Fedora 22 初体验

    在同一个硬盘上安装多个 Linux 发行版 以前对多个 Linux 发行版的折腾主要是在虚拟机上完成.我的桌面电脑性能比较强大,玩玩虚拟机没啥问题,但是笔记本电脑就不行了.要在我的笔记本电脑上折腾多个 ...

随机推荐

  1. POJ 2785_4 Values whose Sum is 0

    题意: A,B,C,D四组数中各取一个数,使这四个数相加为0,问有多少组取法? 分析: 四个数列有n4种取法,规模较大,但是可以将他们分成AB,CD两组,分别枚举,最后再合并. 代码: #includ ...

  2. Google Protocol Buffer 的使用(二)

    一.protobuf应用场景 protobuf 在Java中的应用场景可以是序列化和反序列化,流可以通过文件或者通过网络TCP/UDP等方式传输.新建一个.proto文件 syntax = " ...

  3. Hibernate自定义简单主键生成

    Hibernate自定义主键生成 当使用Hibernate定义pojo的时候,有时候需要生成一定规则的数据表主键,这时候我们可以采用自定义主键生成方式去生成主键. 例如: 1.在pojo属性中定义数据 ...

  4. 怎样载入指定路径的Logback.xml

    今天想外置logback.xml,谢了例如以下代码 File logbackFile = new File("./conf/logback.xml"); if (logbackFi ...

  5. Network problem solving flow chart

    来自为知笔记(Wiz)

  6. react 引入 百度地图API

    使用 Echarts 的地图的时候,发现报错,说 Bmap api is not loaded 百度地图API没有加载 乍一想,Echarts 用的也是 百度地图 啊,没有引入百度地图,还用个啥,当然 ...

  7. B. Amr and The Large Array(Codeforces Round #312 (Div. 2)+找出现次数最多且区间最小)

    B. Amr and The Large Array time limit per test 1 second memory limit per test 256 megabytes input st ...

  8. C++获取时间的方法

    //方案- 长处:仅使用C标准库:缺点:仅仅能精确到秒级 #include <time.h>  #include <stdio.h>  int main( void )  {  ...

  9. 容器HashMap原理(学习)

    一.概述 基于哈希表的 Map 接口的非同步实现,允许使用 null 值和 null 键,不保证映射的顺序 二.数据结构 HashMap实际上是一个“链表散列”的数据结构,即数组和链表的结合体:Has ...

  10. go1

    关键字: break default func interface select case defer go map struct chan else goto package switch cons ...