C# List Copy

UserModel 略

List<UserModels> lstUser = new List<UserModels>{...}

Coyp:

  var lstUserCopy = new List<UserModels>(lstUser.ToArray());

Test1:

  lstUserCoyp.Add(new UserModels{...}); 

  lstUser.length + 1 = lstUserCoyp.length       OK!

Test2:

  lstUserCoyp[0].Birthday = DateTime.Parse("2014/12/31");

  lstUser[0] 发成变化。   ERROR!

结论-----------------------------------------------------------------

var lstUserCopy = new List<UserModels>(lstUser) 如果是值类型可以使用。不适用于引用类型。

List.CopyTo() 方法也是如此,不是深度考备。

CopyTo考备的只是UserModel的值,而UserModel的值都只是UserModel对象的引用。

List深Copy------------------------------------------------------------------

model

[Serializable]
    public class UserModels:ICloneable
    {
        public string UserName { get; set; }
        public int Age { get; set; }
        public DateTime Birthday { get; set; }

        public object Clone()
        {
            MemoryStream stream = new MemoryStream();
            BinaryFormatter formatter = new BinaryFormatter();
            formatter.Serialize(stream, this);
            stream.Position = 0;
            var obj = formatter.Deserialize(stream) as UserModels;
            return obj;
        }
    }
View Code

list扩展方法

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

使用
var lstUserCopy = lstUser.Clone();

转载于:https://www.cnblogs.com/lizikang2013/p/4137027.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值