比如有一个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了,请问这个问题应该如何解决?

解决方案 »

  1.   

    receive方法中第一句就来个深拷贝
      

  2.   

    C#引用类型传递时都是传的引用啊.你只能自己写个拷贝函数去拷贝啊.
    比如这样写
    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);
       }
    }
      

  3.   

    浅拷贝使用Object类MemberwiseClone实现   
    MemberwiseClone:创建当前 Object 的浅表副本
    浅拷贝(shallow copy)对于引用类型对象中的值类型字段进行了逐位复制。赋值运算符只是把源对象的引用赋值给目的对象,两者引用同一个对象。
    浅拷贝后的对象的值类型字段更改不会反映到源对象,而赋值运算后的对象的值类型字段更改会反映到源对象
      

  4.   

    你直接用 .Clone 那个对象 克隆下吗
      

  5.   

    http://topic.csdn.net/u/20111201/01/f6fe06d8-a117-4c9a-8f7f-8db7f6143aaa.html
      

  6.   

    实现ICloneable接口,实现一个自己的拷贝。
      

  7.   

    简单地,你还可以使用结构体public struct Animal
    {
      public int age;
    }
      

  8.   

    这不是跟LZ所说的情况一样呢?
    直接用linq to object里面扩展方法。toList(),搞定拷贝。