问题标签 [icloneable]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
933 浏览

c# - 如何在以抽象类为根的树层次结构中更正实现 ICloneable?

给定一个树层次结构,假设它如下:

我想实现 ICloneable 接口。在 Student.Clone 方法中,我希望执行以下操作:

因为 Person 是抽象的,所以无法在 Person.Clone() 方法中创建 Person,所以无法返回克隆的 Person,因此无法克隆 Person。

我想出的最佳答案是重载 Person 类中的 Clone() 方法以接收 Person,克隆并返回它。然后在 Student.Clone 实现中调用这个重载来克隆人的相关字段。像这样的东西:

当然,如果上述任何一个类都需要在其构造函数中构建任何逻辑,那么这个解决方案就毫无用处了。有什么想法可以实现更好的吗?

我认为这是一个更一般的问题的子问题,因此答案将非常适合大型超集。

0 投票
1 回答
2820 浏览

.net - .net 中对象的 ICloneable deepcopy

我正在尝试将使用 ICloneable 的深层复制方法添加到使用 xsd.exe 从 xsd 自动生成的类中。我可以让它在一个简单的级别上工作,但是一旦对象嵌套,那么克隆方法就不起作用。

我很确定我在 DirectorReturnType 类上的克隆方法有误,但我不知道如何修复它。

任何人都可以提供任何帮助吗?我附上了下面的潜艇和课程:

这按预期工作,消息“test1”,然后是“test2”:

如果我然后添加一个AnnualRetunOfficer 类型的额外对象AROTx,那么它会消息“Test2”,然后是“Test2”。

导演人类型:

导演返回类型:

0 投票
1 回答
197 浏览

c# - C# 克隆一个包含另一个 Object 类型的 Object 的专用 TreeNode

我一直在寻找一个简单的解决方案来克隆包含其他对象的对象。

对于克隆,我正在使用:

listAllTestCases 包含所有类型为“TPFTestCaseTreeNode”的树节点。

循环中的“t”,根据调试器模式确实包含“Obj”的有效值

我也尝试过普通的 Clone() 和 DeepClone(),它们都无法克隆对象“Obj”的状态。它在克隆对象树节点“theNode”中始终保持为空。

谁能提供一个合理的解释,为什么包含另一个对象的对象的克隆在这里失败?这是克隆前和克隆后的两种状态。 初始状态 克隆对象

请注意,我什至也尝试过 binaryformatter(序列化/反序列化机制)。但是,对象“Obj”仍然为空。

0 投票
2 回答
704 浏览

c# - 克隆实现 ICloneable 的对象数组

现在让我们假设我有一个 MyStuff 数组

创建实现 Clone 方法的 MyStuffObjs 的克隆的最快/最简单的方法是什么?

我知道我可以遍历集合并复制每个集合。

肯定有更好的方法吗?

0 投票
2 回答
268 浏览

c# - 克隆列表的正确方法> 在 C# 中

我正在努力克隆引用类型的列表列表。我试图ICloneable在我的参考类中实现,但是,它似乎没有调用其中的Clone()方法。

代码:

0 投票
3 回答
144 浏览

c# - 寻找具有派生返回类型的 Clone() 实现

我确定这一定是重复的,但我找不到答案:

如果我有两节课:

每次我想克隆 CHILD 类型的对象时,我都必须进行显式转换,例如:

有没有办法避免这种转换?我希望能够写:

这在 C# 中可能吗?

0 投票
3 回答
463 浏览

c# - 测试泛型是否支持 ICloneable

我有一个名为 ValueFrequency 的结构,它作为一个结构开始它的生命,你(出于统计原因)可以存储一个(双)值和一个(int)频率(告诉这个值在一组数据中出现的次数。例如,如果你有一个列表/数组的值:1,1,1,2,2,3,4,4,4,4,4 它可以存储为 ValueFrequency 的列表/数组,而不是:(1,3) ,(2,2),(3,1),(4,5)。

无论如何,我发现我可以使用泛型而不是硬编码我的 scruct 来使用 double,这样我就可以将它与外部数据类型一起使用(例如,当使用它来存储来自二维数据集的数据时)。

结构的简化版本:

我的问题是我想将此结构与支持 ICloneable 和 ValueTypes(如 double)的结构/类一起使用。我将如何编写一个复制构造函数(从另一个 ValueFrequncy 复制其字段),如果结构/类支持 IClonable,它将简单地分配相同的值(如果类型是 ValueType)或克隆:

如您所见,我的问题是测试 T 是否为 IClonable 以及实际的克隆(将 T 类型转换为 IClonable 以执行克隆)。

0 投票
5 回答
2116 浏览

c# - 更改不可变类型的属性

我已经将不可变类型存储在临时 CQRS 读取存储中(查询/读取端,实际上是由一个带有抽象访问层的简单列表实现的,此时我不想使用完整的文档数据库)。这些读取存储包含如下项目:

现在我想更改名称并在第二个命令中更改描述。这些更改应保持当前状态,这意味着对于上面的示例:

如果您有多个属性,这对我来说确实很容易出错……您必须设法保持当前状态。我可以为每种类型添加类似 Clone() 的东西,但我认为/希望那里有更好的东西,性能良好且易于使用,我不想编写太多重复代码(懒惰的程序员)。有什么建议可以改进上面的代码吗?SomeItem 类需要保持不变(通过几个不同的线程传输)。

0 投票
1 回答
546 浏览

c# - 传递 ICloneable 类会引发代理错误

我有一个PhoneRecord传递给一个EditWindow,以便用户能够编辑记录。每个PhoneRecord都有一个类型CostCode。在EditWindow我克隆一条记录以打破对 的引用,SelectedRecord以便在用户单击取消时,我可以传回PhoneRecord. 这是我克隆的方法:

PhoneRecord是EF生成的部分类,所以这是我实现的方式ICloneable

当用户单击取消时,我将返回_tempRecord并对其进行一些处理以恢复到DataGrid/中的原始状态TextBoxes

但是,这会引发错误,并且CostCode会从TextBox:

“存储在代理中的实体包装器没有引用同一个代理”

有没有一种方法可以防止这种情况发生,以便我可以通过PhoneRecord有效的方式传回 a CostCode

0 投票
0 回答
36 浏览

c# - 克隆的目的是什么?

我是 C# 新手,正在处理现有项目。我clone在所有数据类中都发现了这个,有人能告诉我为什么有必要这样做吗?如果我不使用克隆,有任何已知问题吗?提前致谢!