C# 如何通过类列表实例化和使用类?

C# 如何通过类列表实例化和使用类?,c#,.net,C#,.net,我有一个数据集结构,这样一个项目包含多个作业,每个作业包含多个工作项。我创建了以下三个类: public class WorkItemForRollup { public Guid JobID { get; set; } public string Description { get; set; } public decimal Price { get; set; } public DateTime ScheduledDate { get; set; } } p

我有一个数据集结构,这样一个项目包含多个作业,每个作业包含多个工作项。我创建了以下三个类:

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; }
}
用于汇总的公共类工作项
{
公共Guid作业ID{get;set;}
公共字符串说明{get;set;}
公共十进制价格{get;set;}
公共日期时间计划日期{get;set;}
}
公共类职位汇总
{
公共Guid作业ID{get;set;}
公共字符串JobName{get;set;}
公共十进制价格{get;set;}
公共日期时间计划开始{get;set;}
公共列表工作项{get;set;}
}
公共类项目汇总
{
公共十进制总数{get;set;}
公共列表作业{get;set;}
}
有人能告诉我实例化这些东西并随后为类成员赋值的语法吗?以下是我一直在努力实现的目标:

    ProjectRollup projectRollup = new ProjectRollup() { Jobs = new List<JobForRollup>() };
    JobForRollup jobsForRollup = new JobForRollup() { WorkItems = new List<WorkItemForRollup>() };
ProjectRollup ProjectRollup=newprojectrollup(){Jobs=newlist()};
JobForRollup JobForRollup=新JobForRollup(){WorkItems=新列表()};
然后我可以执行
projectRollup.Jobs.Add(作业)其中“作业”是JobForRollup实体,
但我不知道如何将我的工作项添加到每个工作中


你能帮忙吗,或者给我看看另一种有效的方法?谢谢大家!

初始化嵌套集合总是有点烦人。但是,由于您已经有了属性,这就足够简单了。只需停止使用auto implement属性,编写自己的属性,如下所示:

private List<JobForRollup> _Jobs;

public List<JobForRollup> Jobs {
  get{
    if (_Jobs == null)
      _Jobs = new List<JobForRollup>();
    return _Jobs;
  }
  set{
    _Jobs=value;
  }
}
private List\u作业;
公开列出工作{
得到{
如果(_Jobs==null)
_作业=新列表();
返回工作岗位;
}
设置{
_工作=价值;
}
}

编写自己的属性代码的最大危险是意外地让其他类代码访问备份字段。但添加下划线作为前缀已经足够可靠,可以在Microsoft的所有示例代码中使用。

实际上,这不是实例化此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
                }
            }
        }
    }
};
ProjectRollup ProjectRollup=newprojectrollup()
{
作业=新列表()
{
新的JobForRollup()作业
{
JobID=Guid.NewGuid(),
JobName=“job1”,
价格=434,
ScheduledStart=日期时间。现在,
工作项=新列表()
{
新的WorkItemForRollup()
{
Description=“item1”,
价格=34,
ScheduledDate=DateTime.Now
}
}
}
}
};
您应该
将每个嵌套对象和集合附着在一起


描述您的问题并解释为什么不使用ORM,例如
EntityFramework
nhibernate
等?

要初始化列表,您可以用这种方式编写类

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>();
}

您应该使用构造函数中的
列表
初始化集合初始化作业实例。此解决方案是否存在并发问题?@Isitar与其他未设计为避免这些问题的代码一样多。我以前从未认为这是个大问题。但我想使用Async可能会发生这种情况。这似乎很理想。但是我问题的第二部分呢,也就是说,我如何给这些对象赋值呢?特别是,我仍然很难弄清楚如何填充工作项并将其添加到结构中。谢谢
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;
}