首页 > 编程语言 >C# 适配 Maspter 不覆盖填充值

C# 适配 Maspter 不覆盖填充值

时间:2024-03-29 11:13:42浏览次数:25  
标签:C# 适配 destPropertyInfo dest Maspter propertyInfo var null type

public static class MapExtension
{
    public static void Fill(this object src, object dest)
    {
        if (src == null || dest == null)
            return;

        var srcType = src.GetType();
        var destType = dest.GetType();
        var propertyInfos = srcType.GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.SetProperty | BindingFlags.GetField);


        var mapRules = TypeAdapterConfig.GlobalSettings.RuleMap.Values.SelectMany(z => z.Settings.Resolvers.Select(x => new
        {
            x.DestinationMemberName,
            x.SourceMemberName
        })).ToArray();

        foreach (var propertyInfo in propertyInfos)
        {
            var destPropertyInfo = destType.GetProperty(propertyInfo.Name);
            if (destPropertyInfo == null)
            {
                var destinationMemberName = mapRules.FirstOrDefault(x => x.SourceMemberName == propertyInfo.Name)?.DestinationMemberName;
                if (destinationMemberName == null) continue;

                destPropertyInfo = destType.GetProperty(destinationMemberName);
            }

            if (destPropertyInfo == null)
                continue;

            if (IsComplexObject(propertyInfo.PropertyType))
            {
                Fill(propertyInfo.GetValue(src), destPropertyInfo.GetValue(dest));
                continue;
            }

            var value = propertyInfo.GetValue(src);
            if (propertyInfo.PropertyType.IsValueType && value.Equals(GetDefaultValue(propertyInfo.PropertyType)))
                continue;

            if (value != null)
                destPropertyInfo.SetValue(dest, value);
        }
    }

    static bool IsComplexObject(Type type)
    {
        return !type.IsPrimitive && !type.IsEnum && type != typeof(string) && type != typeof(decimal);
    }

    static object GetDefaultValue(Type type)
    {
        return Activator.CreateInstance(type);
    }
}

标签:C#,适配,destPropertyInfo,dest,Maspter,propertyInfo,var,null,type
From: https://www.cnblogs.com/fires/p/18103362

相关文章

  • 转载:使用 Linux tracepoint、perf 和 eBPF 跟踪数据包 (2017)
    http://arthurchiao.art/blog/trace-packet-with-tracepoint-perf-ebpf-zh/Linux允许在主机上用虚拟网卡(virtualinterface)和网络命名空间(networknamespace)构建复杂的网络。但出现故障时,排障(troubleshooting)相当痛苦。如果是3层路由问题,mtr 可以排上用场;但如果是更底层的问......
  • LeetCodeHot100 动态规划 70. 爬楼梯 118. 杨辉三角 198. 打家劫舍 279. 完全平方
    70.爬楼梯https://leetcode.cn/problems/climbing-stairs/description/?envType=study-plan-v2&envId=top-100-likedpublicintclimbStairs(intn){if(n<=1)returnn;int[]dp=newint[n+1];dp[1]=1;dp[2]=2;......
  • 用docker创建nginx反向代理tcp流量
    有这样一个需求,需要反向代理一个tcp连接,我打算用nginx来做,比较简单的实现掉./conf/nginx.conf配置文件usernginx;worker_processesauto;error_log/var/log/nginx/error.lognotice;pid/var/run/nginx.pid;events{worker_connections1024;}......
  • MD5 计算 (下一代加密辅助类, Win32, C++)
    CCNGHelper.h#pragmaonce#include<string>#include<tchar.h>#include<windows.h>#include<bcrypt.h>#ifdef_UNICODEusing_tstring=std::wstring;#elseusing_tstring=std::string;#endif//下一代加密辅助类//客户端:WindowsVista及......
  • Cisco Packet Tracer模拟器下载笔记
    给初学Cisco网络设备的小伙伴演示思科模拟器下载的方法及注意事项!目录   1:百度输入“思科网络技术学院”搜索官网主页。   2:进入“思科网络技术学院”主页。   3:登录个人账号。      3-1:点击“LogIn”。      3-2:有账户自接......
  • YoloV8改进策略:BackBone改进|EfficientVMamba
    摘要https://arxiv.org/pdf/2403.09977.pdf先前的轻量级模型开发努力主要集中在基于CNN和Transformer的设计上,但仍面临持续的挑战。CNN擅长局部特征提取,但会牺牲分辨率,而Transformer提供了全局范围,但会加剧计算需求O......
  • Vue:实现子组件和父组件数据的双向绑定案例和sync修饰符简化
    实现子组件和父组件数据的双向绑定(实现App.vue中的selectId和子组件选中的数据进行双向绑定)代码案例BaseSelect.vue<template><div><select:value="selectId"@change="selectCity"><optionvalue="101">北京</option><op......
  • 基于DBO-CNN-BiLSTM数据回归预测(多输入单输出),蜣螂优化算法优化CNN-BiLSTM-附代码
    基于DBO-CNN-BiLSTM的数据回归预测是一种综合利用了深度学习中的多种技术的方法,包括卷积神经网络(CNN)、双向长短期记忆网络(BiLSTM)和注意力机制(Attention)。蜣螂优化算法用于优化CNN-BiLSTM模型的参数。以下是基于DBO-CNN-BiLSTM的数据回归预测的原理:CNN(卷积神经网络):CNN是一......
  • 2024年数字IC秋招-华为-数字芯片-实习笔试题
    文章目录前言一、单选题1、wirea=1'bx;wireb;bufif1(b,a,1);则b=2、在CDC异步电路检查报告中,如果出现了violation信息,那么在实际电路中一定会出现错误。3、芯片电压的设计规格是中心电压0.9V,以下说法不正确的是5、SystemVerilog语句$urandom_range(100)可......
  • Extraneous non-props attributes (title) were passed to component but could not b
    大概意思就是给子组件传递的属性,由于子组件呈现片段或文本根节点,无法自动继承;就是"透传Attributes"。对于多根节点的组件没有自动attribute透传行为;如果$attrs没有被显式绑定,将会抛出一个运行时警告。解决方式:手动显示绑定$attrs(1)模板 <template> <h1>多根节点的At......