将一个结构的成员复制到另一个 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#的主要内容,如果未能解决你的问题,请参考以下文章