0

我需要一个项目的副本,但我没有找到类似Clone()或其他的方法。这是我的代码:

 private void Change(ArrayList SecuenciasIniciales, Project pj)
        {
            Project pjTemp = pj; //not make a copy else the same reference   

            for (int i = 0; i < SecuenciasIniciales.Count;i++ )
            {
                int[] secuencia = (int[])SecuenciasIniciales[i];
                ChangeProjectTemp(secuencia,ref pjTemp,pj);

                pjTemp.Application.LevelingOptions(false, true, true, PjLevelOrder.pjLevelPriority, true, Type.Missing, Type.Missing, PjLevelPeriodBasis.pjDayByDay, true, false, Type.Missing);
                pjTemp.Application.LevelNow(true);

                if (Directory.Exists(Server.MapPath("") + "\\sample.mpp"))
                {
                    System.IO.File.Delete(Server.MapPath("") + "\\sample.mpp");
                }

                pjTemp.Application.FileSaveAs(Server.MapPath("") + "\\sample.mpp", PjFileFormat.pjMPP, Type.Missing, Type.Missing, Type.Missing,
        Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);

                pjTemp.Application.FileSave();
                pjTemp.Application.DocClose();
                pjTemp.Application.Quit(PjSaveType.pjDoNotSave);

              }
}

我不想要那种pj改变。解决办法是什么?

4

2 回答 2

0

我相信你正在寻找这个

C# 中的深度克隆对象

这里的这个链接也可能有用

深克隆与浅克隆

此代码来自我评论中的链接 - 为了您的缘故,已更改为 Project。

一个可能对您有用的浅拷贝示例:

class Project : ICloneable
{
   //rest of your class
   int blah;
   string blah2;

   public Project()
   {

   }
   //rest of your class

   public object Clone()
   {
      return this.MemberwiseClone();      // call clone method
   }
}

然后在您展示的代码中执行此操作-

  Project pjTemp = (Project)pj.Clone(); 
于 2013-02-15T22:21:30.410 回答
0

如何制作项目的副本有两种可能的选择,它们都可以解决不同的任务。

任务 1:由于 COM 调用速度较慢,您想要制作一个项目的副本以对项目执行更快的分析。

解决方案:通过 MS Project COM 接口阅读所有您想了解的项目信息,将数据保存到您自己的数据结构中,然后对数据结构做任何您想做的事情。该任务的替代解决方案可能是将项目保存为 XML 并将 XML 反序列化为数据结构。

任务 2:您想要制作项目的副本以使用它,就像使用 MS Project API 的新项目一样。例如,您的初始项目是一个模板。

解决方案:使用Application.FileSaveAs并稍后使用新创建的文件。

重要的是要了解您使用 API 到 MS Project 来操作您的项目,但 MS Project 不是 .NET 应用程序,并且没有任何类似的 .NET 功能IClonable可供Object.MemberwiseClone您使用。你只能告诉 MS Project 要做什么,它会以某种方式做到这一点,但没人知道怎么做。

于 2013-02-16T03:32:48.637 回答