C# 利用反射给不同类型对象同名属性赋值

    public class ObjectReflection
    {
        public static PropertyInfo[] GetPropertyInfos(Type type)
        {
            return type.GetProperties(BindingFlags.Public | BindingFlags.Instance);
        }

        public static void AutoMapping<S, T>(S s, T t)
        {
            // get source PropertyInfos
            PropertyInfo[] pps = GetPropertyInfos(s.GetType());
            // get target type
            Type target = t.GetType();

            foreach (var pp in pps)
            {
                PropertyInfo targetPP = target.GetProperty(pp.Name);
                object value = pp.GetValue(s,null);

                if (targetPP != null && value != null)
                {
                    targetPP.SetValue(t, value, null);
                }
            }
        }

调用方式

//Class1 objfrom,Class2 objto;

ObjectReflection.AutoMapping<Class1, Class2>(objfrom, objto);
//将 objfrom 的属性复制给objto的同名属性。
时间: 2024-10-17 12:34:44

C# 利用反射给不同类型对象同名属性赋值的相关文章

利用反射机制,对对象的属性值进行自动设置

import java.lang.reflect.Method; /** * 对象的属性值自动设置,利用反射机制 */ public class AutoSet { /** * 将源对象的属性值赋值到目标对象,属性名一致,且源对象有get方法,目标对象有set方法 * @param src 源对象 * @param target 目标对象 * @return 赋值后的目标对象 */ public static Object autoGetterAndSetter(Object src, Obje

java利用反射完成不同类之间相同属性的复制

如果我们有两个不同的类对象,但他们具有相同的属性,我们怎么将一个对象的属性值复制给另外一个对象呢? 我们可以利用反射完成这个需求:首先我们利用反射得到两个对象的所有属性,再通过循环得到源对象(被复制的对象)每个属性值,然后再将值复制给目标对象(复制的对象)的属性. 源对象的类: public class UserSource { private String name; private int age; private String address; public String getName(

Java获取未知类型对象的属性

获取未知类型对象的属性通常有两种方式: 一是通过自定义注解的方式,通过获取被注解的属性从而获取属性的值,这种方式也是Spring参数注入的重要实现手段 二是通过反射获取属性的名称,通过属性名从而获取属性,这种方式在开发时是比较简便易实现的. 一.关于注解 1.自定义注解 首先定义一个@interface类型的注解接口 @Target(ElementType.FIELD) @Retention(RetentionPolicy.RUNTIME) public @interface ClassBean

利用反射将任意元素类型 的 List 转为 DataTable

List to DataTable. 利用反射,将任意元素类型 的 List 转为 DataTable. Using System.Collections; Using System.Reflection; ? public static DataTable ToDataTable(IList list) {     DataTable result = new DataTable();     if (list.Count > 0)     {         PropertyInfo[] p

在Flex中使用JSON对象为属性赋值

JavaScript中,JSON的简洁和强大令人印象深刻.ActionScript3作为一种从JavaScript语言发展起来的语言,依然可以使用JSON. 依然可以var  object={a:1,b:”b”,c:”1111”};这样的JSON形式创建ActionScript对象. 在JavaScript中,我们常常在new 对象时,通过传入{……}这样的JSON数据方便地初始化对象. 在ActionScript中,我们依然可以这样做. package { public class Const

【Java EE 学习第69天】【struts2】【paramsPrepareParamsStack拦截器栈解决model对象和属性赋值冲突问题】

昨天有同学问我问题,他告诉我他的Action中的一个属性明明提供了get/set方法,但是在方法中却获取不到表单中传递过来的值.代码如下(简化后的代码) 1 public class UserAction implements modelDriven<User>(){ 2 private String name; 3 private User model; 4 public void setName(String name){ 5 this.name=name; 6 } 7 public St

C# 利用反射动态将字符串转换成属性对应的类型值

/// <summary> /// 为指定对象分配参数 /// </summary> /// <typeparam name="T">对象类型</typeparam> /// <param name="dic">字段/值</param> /// <returns></returns> private T Assign<T>(Dictionary<stri

C#通过反射实现两个对象相同属性值的复制

1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Security.Permissions; 5 using System.Data; 6 using MySql.Data; 7 using System.Configuration; 8 using System.IO; 9 using System.Text; 10 using System.Reflection; 1

反射给没有set方法的属性赋值

public class Test { private String readOnly; public String getReadOnly() {     return readOnly; } public static void main(String[] args) throws SecurityException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException {     Test t = n