复制一个List<T>对象

本文介绍了在C#中如何对值类型和引用类型的List进行深拷贝的方法。对于值类型,可以直接使用构造函数复制;对于引用类型,则可以通过实现ICloneable接口并利用LINQ或序列化的方式进行深拷贝。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对于值类型的List直接用以下方法就可以复制:

List<T> oldList = new List<T>();
oldList.Add(..);
List<T> newList = new List<T>(oldList);

对于引用类型的List无法用以上方法进行复制,只会复制List中对象的引用,可以用以下扩展方法复制:

static class Extensions
{
        public static IList<T> Clone<T>(this IList<T> listToClone) where T: ICloneable
        {
                return listToClone.Select(item => (T)item.Clone()).ToList();
        }
}

当然前题是List中的对象要实现ICloneable接口

 

另一个更保险的方法是:

public static T Clone<T>(T RealObject)
{
    using (Stream objectStream = new MemoryStream())
    {
            IFormatter formatter = new BinaryFormatter();
            formatter.Serialize(objectStream, RealObject);
            objectStream.Seek(0, SeekOrigin.Begin);
            return (T)formatter.Deserialize(objectStream);
    }
}

转载于:https://www.cnblogs.com/asyuras/archive/2011/02/01/1948547.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值