簡體   English   中英

如何使用類列表實例化和使用類?

[英]How to instantiate and use classes with a list of classes?

我有一個數據集結構,這樣一個項目包含多個Job,每個Job包含多個WorkItem。 我創建了以下三個類:

public class WorkItemForRollup
{
    public Guid JobID { get; set; }
    public string Description { get; set; }
    public decimal Price { get; set; }
    public DateTime ScheduledDate { get; set; }
}

public class JobForRollup
{
    public Guid JobID { get; set; }
    public string JobName { get; set; }
    public decimal Price { get; set; }
    public DateTime ScheduledStart { get; set; }
    public List<WorkItemForRollup> WorkItems { get; set; }
}

public class ProjectRollup
{
    public decimal Total { get; set; }
    public List<JobForRollup> Jobs { get; set; }
}

有人可以告訴我實例化此內容並隨后將值分配給類成員的語法嗎? 這是我一直在努力的工作:

    ProjectRollup projectRollup = new ProjectRollup() { Jobs = new List<JobForRollup>() };
    JobForRollup jobsForRollup = new JobForRollup() { WorkItems = new List<WorkItemForRollup>() };

然后,我可以做一個projectRollup.Jobs.Add(job); 其中“作業”是JobForRollup實體,但是我不知道如何將我的WorkItem添加到每個Job中。

您能幫忙還是給我看看另一種可行的方法? 謝謝!

實際上,這不是實例化此n級嵌套類型的好方法,但是以下代碼是示例:

ProjectRollup projectRollup = new ProjectRollup()
{
    Jobs = new List<JobForRollup>()
    {
        new JobForRollup()
        {
            JobID = Guid.NewGuid(),
            JobName = "job1",
            Price = 434,
            ScheduledStart = DateTime.Now,
            WorkItems = new List<WorkItemForRollup>()
            {
                new WorkItemForRollup()
                {
                    Description="item1",
                    Price = 34,
                    ScheduledDate = DateTime.Now
                }
            }
        }
    }
};

您應該attach每個嵌套對象和集合attach在一起。

描述您的問題並解釋為什么不使用諸如EntityFrameworknhibernate等ORM?

要初始化列表,可以用這種方式編寫類

public class WorkItemForRollup
{
    public Guid JobID { get; set; }
    public string Description { get; set; }
    public decimal Price { get; set; }
    public DateTime ScheduledDate { get; set; }
}

public class JobForRollup
{
    public Guid JobID { get; set; }
    public string JobName { get; set; }
    public decimal Price { get; set; }
    public DateTime ScheduledStart { get; set; }
    public List<WorkItemForRollup> WorkItems { get; set; } = new List<WorkItemForRollup();
}

public class ProjectRollup
{
    public decimal Total { get; set; }
    public List<JobForRollup> Jobs { get; set; } = new List<JobForRollup>();
}

現在,您每次構建這些類的新實例時,都會自動初始化所​​有List屬性。 此語法稱為“ 初始化自動實現的屬性” ,從C#6.0開始可用

現在,應該正確接收了應該接收適當類型的項目的List屬性,但是,它們當然是空的。
要將項目添加到JobForRollup類內的WorkItems中,您需要創建WorkItemForRollup的實例並將其添加到JobForRollup實例中

ProjectRollup projectRollup = new ProjectRollup();
JobForRollup job = new JobForRollup();
job.WorkItems.Add(Get_A_WorkItem_Instance_From_Your_Code());
projectRollup.Jobs.Add(job);

// As an example
private WorkItemForRollup Get_A_WorkItem_Instance_From_Your_Code()
{
     WorkItemForRollup item = new WorkItemForRollup
     {
          Description="Description",
          Price = 42.42m,
          ScheduledDate = DateTime.Now.AddDays(30);
     };
     return item;
}

初始化嵌套的Collection總是一件令人討厭的事情。 但是,由於您已經具有屬性,因此這很簡單。 只需停止使用自動實現屬性,然后編寫自己的屬性即可,如下所示:

private List<JobForRollup> _Jobs;

public List<JobForRollup> Jobs {
  get{
    if (_Jobs == null)
      _Jobs = new List<JobForRollup>();
    return _Jobs;
  }
  set{
    _Jobs=value;
  }
}

編寫自己的Property代碼的最大危險是偶然使其他類代碼訪問了后備字段。 但是添加下划線作為前綴已經證明足夠可靠,可以在Microsoft的所有示例代碼中使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM