gpt4 book ai didi

C#复制构造函数生成器

转载 作者:太空狗 更新时间:2023-10-29 21:07:18 25 4
gpt4 key购买 nike

我想将值从一个对象复制到另一个对象。类似于按值传递但带有赋值的东西。

例如:

PushPin newValPushPin = oldPushPin; //I want to break the reference here.

我被告知为此编写一个复制构造函数。但是这个类有很多属性,手写一个拷贝构造函数大概要一个小时。

  1. 有没有更好的方法将一个对象按值分配给另一个对象?
  2. 如果没有,是否有复制构造函数生成器?

注意:ICloneable 在 Silverlight 中不可用。

最佳答案

如果可以将要克隆的对象标记为可序列化,则可以使用内存中序列化来创建副本。检查以下代码,它的优点是它也适用于其他类型的对象,并且您不必在每次添加、删除或更改属性时更改复制构造函数或复制代码:

    class Program
{
static void Main(string[] args)
{
var foo = new Foo(10, "test", new Bar("Detail 1"), new Bar("Detail 2"));

var clonedFoo = foo.Clone();

Console.WriteLine("Id {0} Bar count {1}", clonedFoo.Id, clonedFoo.Bars.Count());
}
}

public static class ClonerExtensions
{
public static TObject Clone<TObject>(this TObject toClone)
{
var formatter = new BinaryFormatter();

using (var memoryStream = new MemoryStream())
{
formatter.Serialize(memoryStream, toClone);

memoryStream.Position = 0;

return (TObject) formatter.Deserialize(memoryStream);
}
}
}

[Serializable]
public class Foo
{
public int Id { get; private set; }

public string Name { get; private set; }

public IEnumerable<Bar> Bars { get; private set; }

public Foo(int id, string name, params Bar[] bars)
{
Id = id;
Name = name;
Bars = bars;
}
}

[Serializable]
public class Bar
{
public string Detail { get; private set; }

public Bar(string detail)
{
Detail = detail;
}
}

关于C#复制构造函数生成器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2521977/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com