【问题标题】:Copy members of one struct to another C#将一个结构的成员复制到另一个 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 类是完美的,因为它默认为您提供深度克隆。我注意到您说过“它必须是用于性能的结构” - 不要陷入认为结构本质上比类或记录更快或更高性能的陷阱。重要的是你对他们做什么!

标签: c# struct


【解决方案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);

【讨论】:

    猜你喜欢
    • 2014-05-28
    • 1970-01-01
    • 1970-01-01
    • 2014-10-19
    • 1970-01-01
    • 2016-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多