看同事使用的 一个ORM 框架 中 有这样一个功能  通过特性(附加属性)的功能来 实现的两个类对象之间动态赋值的 功能

觉得这个功能不错,但是同事使用的 ORM 并不是我使用的  Dapper  所以就自己写了一个实现同样功能的 工具类出来。

发个贴 为其他有这方面需求的人 来做个参考。 希望大家多提点意见。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Serialization; namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
AnimalTypeTestClass testClass = new AnimalTypeTestClass() { Age = "", Name = ""};
Na a = (Na)ClassToHellp.Map<Na>(testClass);
Console.WriteLine(a.MyAge);
Console.WriteLine(a.MyName);
}
}
public class ClassToHellp
{
public static object Map<T>(object os) where T : class, new()
{
// 被转换的类
var t = new T();
var fieldInfos = t.GetType().GetFields();
foreach (var mInfo in os.GetType().GetFields())
{
var mInfoValue = mInfo.GetValue(os);
if (mInfoValue == null)
continue;
foreach (var field in Attribute.GetCustomAttributes(mInfo)
.Where(attr => attr.GetType() == typeof(ObjectToTypeAttribute))
.SelectMany(attr => fieldInfos.Where(field => field.Name == ((ObjectToTypeAttribute)attr).Field)))
{
field.SetValue(t, mInfoValue);
}
}
return t;
} } [AttributeUsage(AttributeTargets.Field)]
public class ObjectToTypeAttribute : Attribute
{
public string Field { get; set; }
public ObjectToTypeAttribute(string pet)
{
Field = pet;
}
} public class AnimalTypeTestClass
{
[ObjectToType("MyName")]
public string Name;
[ObjectToType("MyAge")]
public string Age; } public class Na
{
public string MyName; public string MyAge; }
}

请不要吐槽 使用反射 效率问题。 在不加载DLL 的前提下 反射的效率还是很高的。

同样 在实体类只是对 字段经行筛选 判断 的LINQ 效率其实也还不错。

使用 Attribute +反射 来对两个类之间动态赋值的更多相关文章

  1. 【java回调】java两个类之间的回调函数传递

    背景交代:熟悉用js开发的cordovaAPP:对java一窍不通的我,老师让做一个监测用户拍照事件的功能,无奈没有找到现成的库,无奈自己动手开发java插件~~0基础java GreenHand,祝 ...

  2. python两个类之间变量和函数的调用

    1.class_a() class_b() 2.class_b使用class_a中的变量和函数 3.变量class_a中:class_a.num=... 函数class_b中:先实例化class_a( ...

  3. ArrayList两个对象之间的赋值

    List<String> list1 = new ArrayList<String>(); List<String> list2 = new ArrayList&l ...

  4. c++两个类相互调用

    有可能会碰到两个类之间的相互调用的问题,例如:定义了类A和类B,A中使用了B定义的类型,B中也使用了A定义的类型 class A { B b; }; class B { A a; }; 编译器在声明A ...

  5. C++两个类相互包含引用的问题

    在构造自己的类时,有可能会碰到两个类之间的相互引用问题,例如:定义了类A类B,A中使用了B定义的类型,B中也使用了A定义的类型 class A { B b; } class B { A* a; } 请 ...

  6. C++中两个类相互include的问题

    在构造自己的类时,有可能会碰到两个类之间的相互引用问题,例如:定义了类A类B,A中使用了B定义的类型,B中也使用了A定义的类型 例如: Cup.h #ifndef CUP_H #define CUP_ ...

  7. C++中两个类相互包含引用问题

    在构造自己的类时,有可能会碰到两个类之间的相互引用问题,例如:定义了类A类B,A中使用了B定义的类型,B中也使用了A定义的类型 class A { int i; B b; } class B { in ...

  8. Javers 比较两个类的差异

    Javers 在开发过程中遇到需求,比较数据库中的原数据与新修改要写入库中的数据.这个实体类是比较复杂的.例如有基本类型,BigDecimal类型,自定义类型,Date类型,List集合,Set集合, ...

  9. Java-类与类之间的关系

    类与类之间的几种关系   一.继承关系      继承指的是一个类(称为子类.子接口)继承另外的一个类(称为父类.父接口)的功能,并可以增加它自己的新功能的能力.在Java中继承关系通过关键字exte ...

随机推荐

  1. net start mysql服务名无效

    解决方案:(参考以下命令) 1.win+R键输入cmd敲回车进入dos界面: 2.输入cd d:/mysql-5.5.25/bin敲回车,发现没变化: 3.输入d:敲回车,定位到d:\mysql-5. ...

  2. Kindle3与亚马逊

    喜欢上亚马逊,偶尔会买些免费或极低价格的书,但始终无法把这些书传到“我的”kindle3上,原因是kindle3无法在中国注册,又绕不开DRM,同时经历了换屏.换主板,早已不是原来的kindle了.今 ...

  3. RDD缓存策略

    Spark支持将数据集放置在集群的缓存中,以便于数据重用. Spark缓存策略对应的类: class StorageLevel private( private var useDisk_ : Bool ...

  4. Codeforces Round #218 (Div. 2) C. Hamburgers

    C. Hamburgers time limit per test 1 second memory limit per test 256 megabytes input standard input ...

  5. 剑指Offer:面试题16——反转链表(java实现)

    问题描述 定义一个函数,输入一个链表的头结点,反转该链表并输出反转后的链表的头结点.链表结点如下: public class ListNode { int val; ListNode next = n ...

  6. 学习练习 java编写西游记人物类

    package com.hanqi; public class XiYouJiRenWu { double height; String weapon; String name; void prine ...

  7. Android STL PORT

    ndk中包含了stl对应的库,在$(NKD_HOME)/sources/cxx-stl/stlport/stlport 有关Android NDK的C++ STL开发相关总结如下: 从Android ...

  8. 配置Android环境遇到的问题及解决办法

    配置Android环境遇到的问题及解决办法: 1 环境安装地址 http://pan.baidu.com/s/1jGzNzyI 2 其他: 2.1 安装 2.1.1 安装JDK,JRE 成功安装之后, ...

  9. leetcode 104

    104. Maximum Depth of Binary Tree Given a binary tree, find its maximum depth. The maximum depth is ...

  10. poj1019_Number_Sequence

    这题目关键是打表,haha[k]数组表示的是S1S2..Sk该串结尾所在的位置.然后用n去找n所在的k值,此时haha[k-1]<n<=haha[k].然后再算出从haha[k]位置到n一 ...