首页 > 编程语言 >C#——转换两个不同类型但是成员相同的对象(代码实现)

C#——转换两个不同类型但是成员相同的对象(代码实现)

时间:2023-01-05 11:01:25浏览次数:40  
标签:转换 instance C# 代码 对象 BindingFlags source null

点击查看代码
        /// <summary>
        /// 转换两个不同类型但是成员相同的对象
        /// </summary>
        /// <typeparam name="T">目标对象</typeparam>
        /// <param name="source">待转换对象</param>
        /// <returns></returns>
        public static T CopySameFieldsObject<T>(Object source)
        {
            Type srcT = source.GetType();
            Type destT = typeof(T);

            // 构造一个要转换对象实例
            Object instance = destT.InvokeMember("", BindingFlags.CreateInstance, null, null, null);

            // 这里指定搜索所有公开和非公开的字段
            FieldInfo[] srcFields = srcT.GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);

            // 将源头对象的每个字段的值分别赋值到转换对象里,因为假定字段都一样,这里就不做容错处理了
            foreach (FieldInfo field in srcFields)
            {
                destT.GetField(field.Name, BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance).
                    SetValue(instance, field.GetValue(source));
            }

            return (T)instance;
        }

标签:转换,instance,C#,代码,对象,BindingFlags,source,null
From: https://www.cnblogs.com/panblink/p/17026927.html

相关文章

  • Leetcode 重排链表 递归
    https://leetcode.com/problems/reorder-list/solutions/45113/Share-a-consise-recursive-solution-in-C++/https://leetcode.cn/problems/reorder-list/solutions/32910......
  • 欧盟电动自行车CE认证EN15194标准测试详情
    2009年欧盟推出了新的电动助力自行车标准EN15194,EN15194标准为国际第一个针对电动助力自行车的安全标准,产品通过EN15194检测可以证明产品符合国际一流水平,并且对企业开拓市......
  • 多传感器的空间同步和时间同步(Lidar+Camera+Radar+IMU)
    应用背景介绍多传感器融合是一项结合多传感器数据的综合性前沿内容,主要包括Camera、激光雷达、IMU、毫米波雷达等传感器的融合,在自动驾驶、移动机器人的感知和定位领域中占......
  • Android EncodingUtils
    EncodingUtils报错CannotResolveSymbolEncodingUtils  提示是:错误:程序包org.apache.http.util不存在 错误:找不到符号  符号:变量 EncodingUtils 解决办法Enc......
  • JavaScript
    1本例使用该方法来“查找”id="demo"的HTML元素,并把元素内容(innerHTML)更改为"HelloJavaScript":document.getElementById("demo").innerHTML="HelloJavaScript"......
  • 【栈】LeetCode 1209. 删除字符串中的所有相邻重复项 II
    题目链接1209.删除字符串中的所有相邻重复项II思路用栈存储Pair<Character,Integer>,整数表示该字符连续出现的次数。遍历字符串s将其中的字符c依次压入栈顶并......
  • 文献与代码管理工具及统计基础
    文献与代码管理工具及统计基础学习方法:好好上网,文献与代码管理工具1.好好上网2.Mendeley3.github1.好好上网,好好学习,好好提问上网入口:搜索引擎(Google、Bing)查文......
  • git commit 详解
    gitcommit命令用来将本地暂存的修改提交到版本库。gitcommit-m'提交信息'。我们用的比较多的应该就是-m参数。添加提交信息。经常手抖的同学可能会知道,gitcommit......
  • composer 换源
    #首先把默认的源给禁用掉composerconfig-gsecure-http false#再修改镜像源这里我使用阿里的源composerconfig-grepo.packagistcomposerhttps://mirrors.aliyu......
  • (MFC)c++字符串相加问题
    在使用CString对象进行相加时,会出现CStringc=CStringA+CStringB;时c只为A,或者B的情况,这种情况不是每次都有的,可以通过每次相加之前releasebuffer的方式来释放缓冲区,......