比如有一个Animal类
public Animal
{
public int age;
}有一个函数
void send(Animal an)
{
for (int i=0;i<10;i++)
{
nodes[i]. receive(an);
}// nodes[]是一个对象数组, receive()使其成员函数}
我想实现同一个an,被不同的nodes处理,但是因为对象时引用传递,node[0].receive(an)执行过,an就改变了,下次node[1].receive(an)所接受到的an就不是原来的an了,请问这个问题应该如何解决?
public Animal
{
public int age;
}有一个函数
void send(Animal an)
{
for (int i=0;i<10;i++)
{
nodes[i]. receive(an);
}// nodes[]是一个对象数组, receive()使其成员函数}
我想实现同一个an,被不同的nodes处理,但是因为对象时引用传递,node[0].receive(an)执行过,an就改变了,下次node[1].receive(an)所接受到的an就不是原来的an了,请问这个问题应该如何解决?
比如这样写
public Animal
{
public int age;
public object Clone()
{
Animal an = new Animal();
an.age = this.age;
return an;
}
}
然后调用时是这样void send(Animal animal)
{
Animal an = (Animal)animal.Clone();
for (int i=0;i<10;i++)
{
nodes[i]. receive(an);
}
}
MemberwiseClone:创建当前 Object 的浅表副本
浅拷贝(shallow copy)对于引用类型对象中的值类型字段进行了逐位复制。赋值运算符只是把源对象的引用赋值给目的对象,两者引用同一个对象。
浅拷贝后的对象的值类型字段更改不会反映到源对象,而赋值运算后的对象的值类型字段更改会反映到源对象
{
public int age;
}
直接用linq to object里面扩展方法。toList(),搞定拷贝。