如何将arraylist值传递给另一个arraylist.

解决方案 »

  1.   

    ArrayList al = new ArrayList();
    al.Add("1");
    ArrayList am = (ArrayList)al.Clone();
      

  2.   


    int intN=arrLA.Count;
    ArrayList arrLB= arrLA.GetRange( 0, intN);
      

  3.   

    ArrayList al = new ArrayList();
    al.Add("1");
    ArrayList am = (ArrayList)al.Clone();
    ----------------------但是你在改变a1的值时,am的值也在改变呀?
      

  4.   

    GetRange方法用在这里有问题吧。
    MSDN中说:此方法不创建元素的副本。新 ArrayList 只是一个进入源 ArrayList 的视图窗口。但是,随后对源 ArrayList 进行的所有更改必须通过此视图窗口 ArrayList 完成。如果直接对源 ArrayList 进行更改,则该视图窗口 ArrayList 将无效,对其执行的任何操作将返回 InvalidOperationException。Clone方法创建浅表副本,仅复制集合的元素(不论它们是引用类型还是值类型),但不复制引用所引用的对象。新集合中的引用与原始集合中的引用指向相同的对象。如果要对两个ArrayList分别操作也有问题。不过对于lz这么简单的描述,两者都可以用,只管传值,不管以后的事情,呵呵(听起来好不负责的口气)。
      

  5.   

    〓〓怎样对两个ArrayList分别操作?????
      

  6.   

    从你的回复来看,你就是需要分开操作,不然你也不会抱怨说:“但是你在改变a1的值时,am的值也在改变呀?”深层拷贝的方法我在查找中,找到了再说。
      

  7.   

    哎,还是不扎实啊。其实很简单,直接用前一个ArrayList作为后一个ArrayList的构造函数参数,这样就等同于深层拷贝。 ArrayList myAL = new ArrayList();
    myAL.Add( "The" );
    myAL.Add( "quick" );
    myAL.Add( "brown" );
    myAL.Add( "fox" );
    myAL.Add( "jumped" );
    myAL.Add( "over" );
    myAL.Add( "the" );
    myAL.Add( "lazy" );
    myAL.Add( "dog" );
    ArrayList myALCopy = new ArrayList(myAL); myALCopy.RemoveAt(0);
    myALCopy.Insert(0, "AAA");
      

  8.   

    还是用最土的方法来做吧:ArrayList arraylist1 = new ArrayList();
    arraylist1.Add("1");ArrayList arraylist2 = new ArrayList();
    for (int i = 0; i < arraylist1.Count; i++)
    {
        arraylist2.Add(arraylist1[i]);
    }
      

  9.   

    土方法 还是 用前一个ArrayList作为后一个ArrayList的构造函数参数  都不行。
      

  10.   

    ArrayList myAL = new ArrayList();
    Test t = new Test();
    t.AA = "111";
    myAL.Add(t);ArrayList myALCopy = new ArrayList(myAL);
    t.AA = "222";
    //这时看myALCopy也变了。
    public class Test
    {
    private string aa;
    public string AA
    {
    get {return aa;}
    set {aa = value;}
    }
    }
      

  11.   

    你的代码是对的,但我ArrayList我的需求不是这样的.(请看上面我发的代码)谢谢.
      

  12.   

    ArrayList myAL = new ArrayList();
    Test t = new Test();
    t.AA = "111";
    myAL.Add(t);ArrayList myALCopy = new ArrayList();
    for (int i = 0; i < arraylist1.Count; i++)
    {
        Test tcopy = new Test();
        tcopy.AA =((Test)myAL[i]).AA;
        myALCopy.Add(tcopy);
    }
      

  13.   

    呼,忙活了半天,找到了两种deep copy的方法,feiyun0112说了其中一种,
    在微软的文档(http://samples.gotdotnet.com/quickstart/howto/doc/clone.aspx)中
    也提到了这种方式,不过相比另外一种方式,我觉得还是不太好,因为如果一旦类的定义发生了变化,那么你将不得不搜索所有deep copy的客户代码来进行修改,如果数量很多的话,那会是一场恶梦。
    第二种方法是为你的类实现ISerializable接口,这样修改了类定义之后也只需要修改ISerializable接口实现即可。
    ISerializable接口如何实现请参看MSDN。
    如何使用请参看下面的代码:(VB.NET代码,我没有时间再去修改了,请自行转换为C#)
    <Serializable()> _
    Class TheClass
    ' make sure all the members are serializable :)
    ....
    End Classdim arr as new arraylistfor i as integer = 1 to 100
    arr.add(new theclass)
    nextdim mem as new memroystream
    dim bf as new binaryformatterbf.serialize(mem, arr)
    mem.seek(seekorigin.begin) ' put the pointer back or you get an error..
    dim newarr as arraylist = directcast(bf.deserialize(mem), theclass)