用C#克隆一个简单的盒装类型

时间:2018-08-02 09:09:08

标签: c# clone

我已经阅读了一堆有关C#对象克隆的代码。

出于某些原因,我想使用反射来执行克隆。

我有一个包含简单数据的对象(<script> export default { props: { countries: { type: Array, required: true } }, data() { return { county = {} }; }, mounted() { this.matchCount(); }, methods: { matchCount() { var paysCount = this.pays; paysCount.forEach(item => { this.$axios .get( `https://api.com/federation/}/${item.id}/` ) .then(response => { this.county[item.id] = {}; this.county[item.id].count = response.data.length.toString(); }); }); } } }; </script> intstringList<string>List<int>DateTime或其他简单值类型)。该对象是通过简单的装箱创建的。

double

现在使用this DeepCloneHelperthis one之类的代码会以相同的方式全部失败。在包含原始数据的对象上使用此克隆代码,它们将返回相同的对象。以下示例代码将返回ob2,即ReferenceEqual等于ob1

object ob = 5;  

如何为此类类型编写简单的克隆代码?

我也在SO中进行了很多搜索,因此我很抱歉这个问题是否重复。

说明: 我有一个公共对象,其中包含一些数据和引用(数据的来源)。普通数据本身(数据类型见上文)保存在一个对象中。对于基本类型,它只是装箱的值。

在某些情况下,我需要外部类的副本,因为我想将此函数提供给可能会更改数据的模拟。对象本身是通过构造函数克隆的。现在,我也需要数据的副本。使用任何克隆功能都会创建一个副本,而不是值的克隆。

1 个答案:

答案 0 :(得分:0)

答案在注释中给出:原始类型在装箱时是不可变的,因此无需克隆!

因此,在其中存储一个新值(即int)将创建一个新对象!