访问新类对象的属性

Gri*_*zly 0 c#

如果我正在创建一个新的类对象并分配其属性值,如下所示:

foreach (var item in lstOfPersonnel)
{
    ClassNameVM personVM = new ClassNameVM ()
    {
        Name = item.FirstName + " " + item.LastName,
        TimeTotalPFID = lstSummaries.Where(x => x.PFID == item.ID).Sum(x => x.Time),
        TimeTotalPNFID = lstSummaries.Where(x => x.PNFID == item.ID).Sum(x => x.Time),
        TimeTotalVO = lstSummaries.Where(x => x.VO == item.ID).Sum(x => x.Time),
        TotalTime = // trying to do TimeTotalPFID + TimeTotalPNFID + TimeTotalVO.. but I can't access those properties.
    };

    newListPersonnel.Add(personVM);
}
Run Code Online (Sandbox Code Playgroud)

如何访问TimeTotalPFID,TimeTotalPNFID,TimeTotalVO对象本身的属性?

Rio*_*ams 6

您无法访问这些属性,因为它们在该匿名对象调用的范围内在技术上不存在.

考虑在声明下面的行上设置该属性:

ClassNameVM personVM = new ClassNameVM ()
{
    Name = item.FirstName + " " + item.LastName,
    TimeTotalPFID = lstSummaries.Where(x => x.PFID == item.ID).Sum(x => x.Time),
    TimeTotalPNFID = lstSummaries.Where(x => x.PNFID == item.ID).Sum(x => x.Time),
    TimeTotalVO = lstSummaries.Where(x => x.VO == item.ID).Sum(x => x.Time),
};

// Set your properties here
personVM.TotalTime = personVm.TimeTotalPFID + personVM.TimeTotalPNFID + personVM.TimeTotalVO;
Run Code Online (Sandbox Code Playgroud)

考虑一个构造函数

或者,您可以定义一个构造函数,该构造函数将接受您的item类型的参数并使用它:

public ClassNameVM(YourItemType item)
{
    Name = item.FirstName + " " + item.LastName;
    TimeTotalPFID = lstSummaries.Where(x => x.PFID == item.ID).Sum(x => x.Time);
    TimeTotalPNFID = lstSummaries.Where(x => x.PNFID == item.ID).Sum(x => x.Time);
    TimeTotalVO = lstSummaries.Where(x => x.VO == item.ID).Sum(x => x.Time);
    TotalTime = TimeTotalPFID + TimeTotalPNFID + TimeTotalVO;
}
Run Code Online (Sandbox Code Playgroud)

这将使您更容易使用:

foreach (var item in lstOfPersonnel)
{
    newListPersonnel.Add(new ClassNameVM(item));
}
Run Code Online (Sandbox Code Playgroud)