有没有办法在C#中复制类?像var dupe = MyClass(original)之类的东西。

最佳答案

您可能在谈论深拷贝(deep copy vs shallow copy)?

您要么必须:

  • 实现(硬代码)您自己的方法
  • 尝试实现(或找到)使用Reflection或Emit动态执行的实现(解释为here),
  • 如果对象标记有[Serializable]属性,则
  • 使用序列化和反序列化来创建深拷贝。
  • public static T DeepCopy<T>(T other)
    {
        using (MemoryStream ms = new MemoryStream())
        {
            BinaryFormatter formatter = new BinaryFormatter();
            formatter.Serialize(ms, other);
            ms.Position = 0;
            return (T)formatter.Deserialize(ms);
        }
    }
    

    要获取浅拷贝,可以使用Object.MemberwiseClone()方法,但这是一个 protected 方法,这意味着您只能在类内部使用它。

    对于所有深层复制方法,考虑对其他对象的任何引用或循环引用很重要,这可能会导致创建比您想要的深拷贝。

    关于c# - 复制一个类,C#,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1031023/

    10-13 03:52