[英]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
在一起。
描述您的問題並解釋為什么不使用諸如EntityFramework
, nhibernate
等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.