You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#如何将一个struct的成员复制到另一个更大的struct中

C# 结构体同名成员批量复制方案

下面是3种无需逐行手动赋值的实现方式,可根据你的场景选择:

  • 反射实现(通用无依赖)
    适合临时使用、调用频率低的场景,无需额外引入依赖,只需要写一次通用复制方法即可复用:

    // 通用复制方法,可全局复用
    public static void CopySameNameFields<TSrc, TDest>(TSrc source, ref TDest dest) 
        where TSrc : struct 
        where TDest : struct
    {
        var srcFields = typeof(TSrc).GetFields(System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Public);
        var destFields = typeof(TDest).GetFields(System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Public);
        
        foreach (var srcField in srcFields)
        {
            var matchedDestField = destFields.FirstOrDefault(f => f.Name == srcField.Name && f.FieldType == srcField.FieldType);
            if (matchedDestField != null)
            {
                matchedDestField.SetValueDirect(__makeref(dest), srcField.GetValueDirect(__makeref(source)));
            }
        }
    }
    

    调用方式非常简单:

    CopySameNameFields(GR, ref FR);
    
  • 自定义类型转换(性能最优)
    适合高频调用、结构体结构稳定的场景,无额外性能开销,类型安全:
    只需要在gr结构体定义中新增显式转换运算符即可:

    public struct gr
    {
        public double O,C,L;
        public bool isLastFRH, isLastFRL;
    
        public static explicit operator fr(gr source)
        {
            return new fr()
            {
                O = source.O,
                C = source.C,
                L = source.L,
                isLastFRH = source.isLastFRH,
                isLastFRL = source.isLastFRL
                // fr的其他额外成员会自动取默认值,可后续单独赋值
            };
        }
    }
    

    调用方式:

    FR = (fr)GR;
    
  • 映射库实现(适合已有映射组件的项目)
    如果你的项目已经引入了AutoMapper这类映射组件,可直接配置映射规则使用,无需自己实现反射逻辑:

    // 全局仅需配置一次
    var config = new MapperConfiguration(cfg => cfg.CreateMap<gr, fr>());
    var mapper = config.CreateMapper();
    
    // 赋值调用
    FR = mapper.Map<fr>(GR);
    

内容的提问来源于stack exchange,提问作者Roblogic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 11:45:08