.Net反射-Type类型扩展
只是演示反射的用法,使用反射的方式性能不好,可以使用表达式树的方式做对象映射。查看Linq分类里有相关文章
Mapper:
public class Mapper
{
private static ConcurrentDictionary<Type, PropertyInfo[]> PROPTY_CACHE = new ConcurrentDictionary<Type, PropertyInfo[]>();
public static outT Map<inT, outT>(inT inObj) where outT : class
{
var inType = typeof(inT);
var outType = typeof(outT);
outT outObj = Activator.CreateInstance<outT>(); PropertyInfo[] outProperties = PROPTY_CACHE.GetOrAdd(outType, (k) =>
{
return outType.GetProperties();
});
PropertyInfo[] inProperties = PROPTY_CACHE.GetOrAdd(inType, (k) =>
{
return inType.GetProperties();
});
PropertyInfo inProp = null;
foreach (var outProp in outProperties)
{
if (inProperties.Select(p=>p.Name.Equals(outProp.Name,StringComparison.CurrentCultureIgnoreCase)).Any())
{
inProp = inProperties.FirstOrDefault(p => p.Name.Equals(outProp.Name, StringComparison.CurrentCultureIgnoreCase));
outProp.SetValue(outObj, inProp.GetValue(inObj));
}
}
return outObj; }
}
客户端:
People p = new People() { ID=,Name="fan", Xingbie = true,Birthday=DateTime.Now,Dog=new Pet() { Name="阿黄"} };
PeopleDTO pDTO = Mapper.Map<People, PeopleDTO>(p);
public class People
{
public int ID { get; set; }
public string Name { get; set; }
public bool Xingbie { get; set; }
public DateTime Birthday { get; set; }
public Pet Dog { get; set; }
}
public class PeopleDTO
{
public int ID { get; set; }
public string name { get; set; }
public DateTime Birthday { get; set; }
public Pet dog { get; set; }
}
public class Pet {
public string Name { get; set; }
}
.Net反射-Type类型扩展的更多相关文章
- c#反射机制学习和利用反射获取类型信息
反射(Reflection)是.NET中的重要机制,通过放射,可以在运行时获得.NET中每一个类型(包括类.结构.委托.接口和枚举等)的成员,包括方法.属性.事件,以及构造函数等.还可以获得每个成员的 ...
- 使用Atlas进行元数据管理之Type(类型)
背景:笔者和团队的小伙伴近期在进行数据治理/元数据管理方向的探索, 在接下来的系列文章中, 会陆续与读者们进行分享在此过程中踩过的坑和收获. 元数据管理系列文章: [0] - 使用Atlas进行元数据 ...
- Go语言反射之类型反射
1 概述 类似于 Java,Go 语言也支持反射.支持反射的语言可以在运行时对程序进行访问和修改.反射的原理是在程序编译期将反射信息(如类型信息.结构体信息等)整合到程序中,并给提供给程序访问反射信息 ...
- 反射+type类+Assembly+特性
什么是元数据,什么是反射: 程序是用来处理数据的,文本和特性都是数据,而我们程序本身(类的定义和BLC中的类)这些也是数据. 有关程序及其类型的数据被称为元数据(metadata),它们保存在程序的程 ...
- html5中input的type类型有哪些(总结)
html5中input的type类型有哪些(总结) 一.总结 一句话总结:时间.颜色.(邮件.电话.url).(数字.数字范围).搜索search 二.html5中input的type类型 值 描述 ...
- 基础篇:深入解析JAVA泛型和Type类型体系
目录 1 JAVA的Type类型体系 2 泛型的概念 3 泛型类和泛型方法的示例 4 类型擦除 5 参数化类型ParameterizedType 6 泛型的继承 7 泛型变量TypeVariable ...
- Util应用程序框架公共操作类(十):可空值类型扩展
当你使用可空的值类型时,你会发现取值很不方便,比如Guid? obj,你要从obj中获取值,可以使用Value属性obj. Value,但obj可能为null,这时候就会抛出一个异常. 可空值类型提供 ...
- Input对象的type类型
Input表示Form表单中的一种输入对象,其又随Type类型的不同而分文本输入框,密码输入框,单选/复选框,提交/重置按钮等,下面一一介绍. 1,type=text 输入类型是text ...
- Type 类型
修改 type 类型 UPDATE wd_order2 SET info = array_append(info, row(2,100001, now() )::info ) WHERE id_ ...
随机推荐
- 【2019.7.26 NOIP模拟赛 T3】化学反应(reaction)(线段树优化建图+Tarjan缩点+拓扑排序)
题意转化 考虑我们对于每一对激活关系建一条有向边,则对于每一个点,其答案就是其所能到达的点数. 于是,这个问题就被我们搬到了图上,成了一个图论题. 优化建图 考虑我们每次需要将一个区间向一个区间连边. ...
- c语言新知
C语言学得有点懈怠,昨个遇一个高手. 教了我两天,真细腻. 第一天,让我写一个程序删除字符串多余空格. 我俩代码对比 结果很显然了.
- SVN版本更新自动通知提醒
当其他用户提交后,如何提示我及时更新代码或版本? 一般情况下,代码的更新时间节点在每天工作开始或有重大功能提交时,所以,不是所有人都对此功能有需求,最好的方式是使用客户端"SVN项目监视器& ...
- 错误解决:android.view.InflateException: Binary XML file line #11: Error inflating class com.tony.timepicker.TimePicker
今天在做项目开发时遇到这么一个错误,完整的错误提示信息如下: java.lang.RuntimeException: Unable to start activity ComponentInfo{co ...
- 《一起学mysql》1
自从达内毕业后就没用过mysql,一直用的hive,hdfs 存储数据,最近突然又接触到了关系型数据库.本想随便从网上 找个教程看看,但是都不是很满意,pdf看着又难受,还是自己个儿写个笔记吧. ...
- Visual Studio 语法高亮插件推荐
编辑器 GItHub:https://github.com/Art-Stea1th/Enhanced-Syntax-Highlighting Visual Studio Marketplace:htt ...
- MySQL出现Waiting for table metadata lock的原因以及解决方法(转)
MySQL在进行alter table等DDL操作时,有时会出现Waiting for table metadata lock的等待场景.而且,一旦alter table TableA的操作停滞在Wa ...
- 【设计模式】Prototype
前言 这篇讲设计模式的部分相对较少.Prototype设计模式,它提供一种复制对象的思路.使用Prototype就可以在不需要了解类结构的前提下,复制一个现有对象.写了一个代码片段,讲解使用Objec ...
- AI人脸识别的测试重点
最常见的 AI应用就是人脸识别,因此这篇文章从人脸识别的架构和核心上,来讲讲测试的重点. 测试之前需要先了解人脸识别的整个流程,红色标识代表的是对应AI架构中的各个阶段 首先是人脸采集. 安装拍照摄像 ...
- weblogic删除域
彻底删除weblogic域的方法: 例如:删除域名为:fm_ump的域 第一步,删除域注册记录: [bofm@UAT02-BIZ-ZJCG-AP-008 Middleware]$ cd /home/s ...