Tag: 克隆

MemberWiseClone如何使用克隆属性创建新对象?

我想创建一个更受限制的MemberwiseClone版本,但是我意识到我自己的C#代码可以为对象添加属性的唯一方法是使用dynamic ,但这不能给对象提供与原始对象相同的类型。 另一个更丑陋的选择是为新克隆发出源代码并在运行时编译它,但这会带来复杂性。 assembly参考等,我不关心保持简单。 现在我只是使用MemberwiseClone ,但我真的很好奇它是如何工作的。 我找不到任何反编译的来源。

如何克隆Collection ?

我有一个枚举, Fruit和一个类FruitCollection ,它派生Collection 。 我找不到使用.NET克隆FruitCollection方法,我发现这篇MSDN文章定义了一个DeepClone()函数并使用了MemberwiseClone() 。 现在,因为这是一个枚举,我认为我不需要“深入”克隆它,所以我认为MemberwiseClone()就足够了。 但是,当我在PowerShell中尝试它时,克隆的对象似乎只是指向原始对象而不是克隆的指针。 我究竟做错了什么? 还有另一种简单克隆Collection吗? FruitCollection没有其他自定义成员。 C#代码: public enum Fruit { Apple = 1, Orange = 2 } public class FruitCollection : Collection { public FruitCollection Clone() { return Clone(this); } public static FruitCollection Clone(FruitCollection fruitCollection) { return (FruitCollection)fruitCollection.MemberwiseClone(); } } PowerShell输出: PS> $basket1 = New-Object TestLibrary.FruitCollection PS> $basket1.Add([TestLibrary.Fruit]::Apple) PS> […]

如何克隆微软图表控件?

克隆Microsoft Chart Control对象的推荐方法是什么? 因为它是第三方库,所以我无法使用此处提到的解决方案,因为我无法将对象标记为可序列化。 最好是,我不想引入任何第三方控件来克隆图表,除非没有一个是绝对不可能的。

在C#中克隆对象

我用虚拟属性定义了下一个类: public class Order: BaseEPharmObject { public Order() { } public virtual Guid Id { get; set; } public virtual DateTime Created { get; set; } public virtual DateTime? Closed { get; set; } public virtual OrderResult OrderResult { get; set; } public virtual decimal Balance { get; set; } public virtual Customer Customer { […]

我如何调用MemberwiseClone()?

我对如何使用MemberwiseClone()方法感到困惑。 我查看了MSDN中的示例,他们通过this关键字使用它。 为什么我不能像其他对象的方法一样直接调用它,如GetType()或ToString() ? 另一个没有出现的相关方法是ShallowCopy() 。 如果它们是Object类的一部分,为什么我不能看到它们?

如何深度复制类而不将其标记为Serializable

鉴于以下课程: class A { public List ListB; // etc… } 其中B是另一个可以inheritance/包含其他类的类。 鉴于这种情况: A是一个大类,包含许多引用类型 我不能将B标记为[Serializable]因为我无法访问B源代码 以下执行深度复制的方法不起作用: 我不能使用ICloneable或MemberwiseClone因为A类包含许多引用类型 我无法为A编写复制构造函数,因为该类很大且不断被添加到,并且包含无法深度复制的类(如B ) 我无法使用序列化,因为我无法将包含的类(如B ,没有可用的源代码)标记为[Serializable] 我怎样才能深造A级?

如何克隆inheritance的对象?

我用这种方法得到了一个Tile类: public object Clone() { return MemberwiseClone(); } 另一个inheritance自Tile类Checker 。 我还有一个Board类,它是List 。 我想克隆电路板,所以我写了这个: public Board Clone() { var b = new Board(width, height); foreach (var t in this) b.Add(t.Clone()); return b; } 但它抛出一个错误: 无法从’object’转换为’Checkers.Tile’ 现在我可以让Tile.Clone方法返回一个Tile ,但是然后MemberwiseClone还会复制子Checker的其他属性吗? 如果那不是问题,那么上面的Board.Clone方法和这个之间的语义差异是什么? public Board Clone() { using (var ms = new MemoryStream()) { var bf = new BinaryFormatter(); bf.Serialize(ms, this); […]

类型assembly中未标记为可序列化

我有一个entityClass ,我希望将其序列化为克隆。 但是这个类有一个来自自定义框架的引用程序集,我无法访问代码。 每当我尝试序列化entityClass对象时,它都抛出exception, 在Assembly’…,Version = 4.1.0.0,Culture = neutral,PublicKeyToken = null’中键入…未标记为可序列化。

将所有treeView父级和子级复制到另一个treeView c#WinForms

我试图使用以下代码将树视图(完全)的整个树(完全所有节点)复制到另一个树视图: TreeNodeCollection myTreeNodeCollection = treeView1.Nodes; TreeNode[] myTreeNodeArray = new TreeNode[treeView1.Nodes.Count]; treeView1.Nodes.CopyTo(myTreeNodeArray, 0); treeView2.Nodes.AddRange(myTreeNodeArray); 但这不允许我这样做,它要求删除源treeview中的节点或使用它克隆! 我怎样才能做到这一点? 我不希望我的源treeview在这个过程中丢失任何东西。 **更新**好的我发现了一个复杂的代码(对我来说!!)但我怎么能用它? public static T DeepTreeCopy(T obj) { object result = null; using (var ms = new MemoryStream()) { var formatter = new BinaryFormatter(); formatter.Serialize(ms, obj); ms.Position = 0; result = (T)formatter.Deserialize(ms); ms.Close(); } return (T)result; }

如何在不访问源代码的情况下“深入”克隆第三方类的属性?

.NET框架的ICloneable接口通常提供了一种支持克隆类实例的方法。 但是如果我有多个第三方类 ,并且不想单独关注每个属性,那么如何有效地克隆这些类的对象呢? (这些类的源代码不可用)。 有没有办法使用generics和扩展方法 ? 我需要的是一个深度克隆,它创建一个包含所有属性和(子)对象的精确副本。 示例:假设您要在LinqPad中克隆UserQuery对象: void Main() { UserQuery uc=this; var copy=uc.CreateCopy(); // clone it } 我正在寻找的是一个CreateCopy()扩展,它允许创建一个副本,而不必处理这个类的细节,因为我没有UerQuery的源UerQuery 。 (请注意, UserQuery只是一个示例,用于显示我需要的内容,它也可以是PDF文档类,用户控件类,ADO.NET类或其他任何内容)。