如何复制一个对象

本文关键字:一个对象 复制 何复制 | 更新日期: 2023-09-27 18:15:27

我有一个计划列表,或者别的什么,我不想删除它们中的任何一个。这就是为什么当有人选择"编辑"选项时,我实际上想添加一个具有相同引用的新计划,但只是一个新的ID。然后,我根本不在乎在编辑视图(实际上是创建视图)中将对其进行什么更改。

我使用相同的观点是否创建新的或编辑,但唯一的区别是,如果行动计划——我知道这不是创建新但编辑,然后我想创建视图中显示所有的"编辑"计划参数,如果没有任何计划(如果行动没有得到任何计划)——我知道这是一个完全的新计划(有人选择"创建新的"选项),然后我想要显示相同的观点——空白字段。

下面是我的代码:
public ActionResult CreatePlan(Plan? plan)
        {
            if (plan == null)
            {
                return View();
            }
            else 
            {
                Plan oldPlan = db.PlanSet.Single(p => p.Id == plan.Value.Id);
                return View(oldPlan);
            }
        }

当前,如您所见,如果操作确实获得一个对象-它允许我编辑旧计划。

我如何复制它,以便在视图中进行的任何更改都将使用另一个计划ID保存??希望我把自己说得很清楚,我很高兴得到一些帮助!

如何复制一个对象

我认为你想要的是:Object.MemberwiseClone().

object . memberwiseclone()创建一个对象的浅拷贝,也就是说,它创建一个新对象并复制旧对象的引用(当然,值类型是复制的)。

现在,由于MemberwiseClone实际上是受保护的,您必须做如下操作:

public class Plan 
{
    public Plan clone()
    {
        return (Plan)this.MemberwiseClone();
    }
}

给你的Plan类一个复制构造函数,而不是返回View(oldPlan)返回View(Plan(oldPlan))

对于我的问题,我根本不需要使用复杂的东西。

我所需要做的就是创建两个get操作,一个带有空白字段,另一个带有满是编辑对象的字段。

两个视图将它们的参数发送到相同的post action,该post action获取发送的对象并将其添加到数据库中。当我写:db.PlanSet.AddObject(plan); -它自动添加相同的对象与新的Id,不删除或改变原来的对象。

祝你好运! !