List的多种克隆方式

List list1 = new List{"a","b","c"};
1. var list2 = new List(list1);
2. var list3 = list1.FindAll( (str)=> true );

3. var list4 = list1.GetRange(0,list1.Count);

4.            BinaryFormatter序列化、反序列化

	List list6;
        using (Stream objectStream = new MemoryStream())
        {
            System.Runtime.Serialization.IFormatter formatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
            formatter.Serialize(objectStream, list1);
            objectStream.Seek(0, SeekOrigin.Begin);
            list6 = (List)formatter.Deserialize(objectStream);
        }  
  

5.    XmlSerializer序列化、反序列化

	List list7;
	using(Stream stream=new MemoryStream()) 
        { 
            XmlSerializer serializer =new XmlSerializer(typeof(List)); 
            serializer.Serialize(stream, list1); 
            stream.Seek(0, SeekOrigin.Begin); 
            list7 = (List)serializer.Deserialize(stream); 
    	}  
  
以上1、2、3方法对元素为值类型和字符串类型都适用,克隆后,当源List中元素改变时,不影响复制出来的新List中的元素,对元素为引用类型时,没试过。
4、5方法对元素为任何类型都适用。几种方法的速度和效率有待测试。

你可能感兴趣的:(.Net)