C#按值复制一个对象

这个问题在这里已经有了答案:

  • 深入克隆对象39个答案

  • 使用JSON序列化程序将对象克隆到另一个对象有一种更简单的方法。 这个技巧不需要对克隆类的接口进行修改或实现,只需要像JSON.NET这样的JSON序列化器。

    public static T Clone<T>(T source)
    {
        var serialized = JsonConvert.SerializeObject(source);
        return JsonConvert.DeserializeObject<T>(serialized);
    }
    

    您可以使用此扩展方法来复制所有对象字段和属性。当您尝试复制作为引用类型的字段和属性时可能会出现一些错误。

    public static T CopyObject<T>(this T obj) where T : new()
            {
                var type = obj.GetType();
                var props = type.GetProperties();
                var fields = type.GetFields();
                var copyObj = new T();
                foreach (var item in props)
                {
                    item.SetValue(copyObj, item.GetValue(obj));
                }
                foreach (var item in fields)
                {
                    item.SetValue(copyObj, item.GetValue(obj));
                }
                return copyObj;
            }
    

    链接地址: http://www.djcxy.com/p/40771.html

    上一篇: C# Copy an object by value

    下一篇: Generic Deep Copy in C# for user defined classes