我已经阅读了一堆有关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>
,int
,string
,List<string>
,List<int>
,DateTime
或其他简单值类型)。该对象是通过简单的装箱创建的。
double
现在使用this DeepCloneHelper或this one之类的代码会以相同的方式全部失败。在包含原始数据的对象上使用此克隆代码,它们将返回相同的对象。以下示例代码将返回ob2,即ReferenceEqual等于ob1
object ob = 5;
如何为此类类型编写简单的克隆代码?
我也在SO中进行了很多搜索,因此我很抱歉这个问题是否重复。
说明: 我有一个公共对象,其中包含一些数据和引用(数据的来源)。普通数据本身(数据类型见上文)保存在一个对象中。对于基本类型,它只是装箱的值。
在某些情况下,我需要外部类的副本,因为我想将此函数提供给可能会更改数据的模拟。对象本身是通过构造函数克隆的。现在,我也需要数据的副本。使用任何克隆功能都会创建一个副本,而不是值的克隆。
答案 0 :(得分:0)
答案在注释中给出:原始类型在装箱时是不可变的,因此无需克隆!
因此,在其中存储一个新值(即int)将创建一个新对象!