将一个结构的成员复制到另一个 C#

Posted

技术标签:

【中文标题】将一个结构的成员复制到另一个 C#【英文标题】:Copy members of one struct to another C# 【发布时间】:2021-12-21 16:04:28 【问题描述】:

我想将一个结构 (GR) 的成员复制到另一个更大的结构 (FR)

    public struct gr
    
        public double O,C,L;
        public bool isLastFRH, isLastFRL;
    
    public gr GR;

    // Here I assign values to GR and then I want to copy all these values to FR

    public struct fr
    
        public double O,C,L;
        public bool isLastFRH, isLastFRL;
        // it has more variables.
    
    public fr FR;

有没有可能不一一完成:

    FR.O = GR.O; // and so on...

谢谢

【问题讨论】:

@zerocukor287 OP 正在询问结构 - 没有继承可能(如果你建议那些应该是我同意的类 - 它已经超出了结构的推荐大小,而可变结构是 . .. 次优。但这取决于 OP 来决定) 是的,这是可能的,但是除非您进行内存复制,否则所有其他解决方案都只会进行成员复制,此外,使用自动映射器完成此任务也很不错。简而言之,只需由成员复制并继续前进 @TheGeneral,同意。想要更快的代码?代码。 您可以考虑在struct fr 中创建一个struct gr 字段,然后您可以分配它。 我假设它必须是一个结构(可能是因为您正在执行 p/invoke?)。如果没有,record 类是完美的,因为它默认为您提供深度克隆。我注意到您说过“它必须是用于性能的结构” - 不要陷入认为结构本质上比类或记录更快或更高性能的陷阱。重要的是你对他们做什么! 【参考方案1】:

您不能在 C# 中对结构进行子类化,因此最好的选择是创建一个使用您要复制的结构的新结构。 GR 属性是一个结构,因此它将是您设置的任何内容的副本。

在您的 fr 类中添加 gr 成员:

public struct fr

   public gr GR;
   //add your unique props..

现在您可以创建fr 并设置GR 属性,它会复制。

var gr1 = new gr()   //set all your properties.. ;
var fr1 = new fr()  GR = gr1, ... //set all your fr specific props here ;

【讨论】:

谢谢。这是一个不错的选择!【参考方案2】:

尝试使用 automapper,它可以让您轻松创建映射。 see details

var config = new MapperConfiguration(cfg => cfg.CreateMap<gr, fr>());


var mapper = new Mapper(config);
Fr model = mapper.Map<Fr>(gr);

【讨论】:

以上是关于将一个结构的成员复制到另一个 C#的主要内容,如果未能解决你的问题,请参考以下文章

直接将 C++ 浮点数组成员编组到 C#,无需复制

将成员从一个 pd 复制到另一个?使用 jcl 语句

将 C# 集合复制到另一个集合 [关闭]

vbscript 将AD组成员复制到另一个组

C# 将一个文件夹中的文件复制到另一个文件夹中

如何在 C# 中将数组的一部分复制到另一个数组?