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

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. 纤程(FIBER)

    Indy 10 还包含对纤程的支持.纤程是什么?简单来说,它也是 一个“线程”,但是它是由代码控制的,而不是由操作系统控制的.实际上,可以认为线程 是一个高级纤程.纤程和 Unix 用户线程(Unix ...

  2. c++11中的线程、锁和条件变量

    void func(int i, double d, const string& s) { cout << i << ", " << d ...

  3. Bundle格式文件的安装

    安装VMware Workstation for Linux,文件是Bundle格式,安裝如下: 1 su要先取得root權限2hmod +x VMware-Workstation-Full-7.1. ...

  4. Lightoj 1027 - A Dangerous Maze 【期望】

    1027 - A Dangerous Maze PDF (English) Statistics Forum Time Limit: 2 second(s) Memory Limit: 32 MB Y ...

  5. cnn,rnn,dnn

    CNN(卷积神经网络).RNN(循环神经网络).DNN(深度神经网络)的内部网络结构有什么区别? https://www.zhihu.com/question/34681168 CNN(卷积神经网络) ...

  6. restlet 2.3.5 org.restlet包导入eclipse出现的com.sun.net.httpserver类包找不到问题

    准备过一遍restlet 2.3.5 JavaEE的源码. 环境 eclipse3.7.2 和 jdk 7.0 将org.restlet 包增加到eclipse中.出现 com.sun.net.htt ...

  7. gitlab的安装和配置

    1 使用omnibus gitlab来安装gitlab 也就是说,将gitlab和它所需要的组件打一个包,即打一个bundle进行安装. 第一步,安装gitlab的源. curl https://pa ...

  8. 容器HashSet原理(学习)

    一.概述 使用HashMap存储,非线程安全: 二.实现 HashSet 底层使用 HashMap 来保存所有元素,因此 HashSet 的实现比较简单,相关 HashSet 的操作,基本上都是直接调 ...

  9. 电脑的系统盘只有10G了

    软件也是缓存多了,准备把一些让家人卸载,昨天开始布置培训任务就是有一个电报的程序,把流程说了下,从今天开始就会指导,错误点分析.

  10. bzoj1776

    点分治/贪心 对于点分治的理解不够深刻...点分治能统计树上每个点对的信息,那么这里就是统计同种颜色点对之间的最大距离,自然可以用点分 然后点分,每次统计最大距离,但是略微卡常... 还有一种贪心的方 ...