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();

posted @ 2014-12-02 11:34  李子康  阅读(1799)  评论(0编辑  收藏  举报