C#如何通过构造函数传入类似对象的列表来创建具有只读属性的对象列表
我的班级定义如下。没有太多细节,我不希望任何人能够改变这个实例化的对象,或者传递给这个类构造函数的对象C#如何通过构造函数传入类似对象的列表来创建具有只读属性的对象列表,c#,C#,我的班级定义如下。没有太多细节,我不希望任何人能够改变这个实例化的对象,或者传递给这个类构造函数的对象 public class ItemDeliveryInfo { public ItemDeliveryAudit ItemDeliveryAudit { get { return this._itemDeliveryAudit; } } public int ItemDeliveryAudi
public class ItemDeliveryInfo
{
public ItemDeliveryAudit ItemDeliveryAudit
{
get
{
return this._itemDeliveryAudit;
}
}
public int ItemDeliveryAuditId
{
get
{
return this.ItemDeliveryAudit.ItemDeliveryAuditId;
}
}
public int? DeliveryDriverId
{
get
{
return this.ItemDeliveryAudit.DeliveryDriverId;
}
}
public int DeliveryId
{
get
{
return this.ItemDeliveryAudit.DeliveryId;
}
}
public int StoreId
{
get
{
return this.ItemDeliveryAudit.StoreId;
}
}
private ItemDeliveryAudit _itemDeliveryAudit;
private bool _isItemLate;
private bool _isItemOnTime;
internal ItemDeliveryInfo(ItemDeliveryAudit itemDeliveryAudit, bool itemLate, bool itemOnTime)
{
this._itemDeliveryAudit = drAssignedAudit;
this._isItemLate = itemLate;
this._isItemOnTime = itemOnTime;
}
public bool IsItemLate()
{
return this._isItemLate;
}
public bool IsItemOnTime()
{
return this._isItemOnTime;
}
}
当前,构造函数用于创建单个ItemDeliveryInfo对象,并成功返回我想要的对象
ItemDeliveryInfo infoObject = new ItemDeliveryInfo(itemAudit, true, false);
然而,我无法想象有一个构造函数将按如下方式执行
List<ItemDeliveryAudits> itemDeliveryAudits = // code to populate list to pass to the ctor;
List<ItemDeliveryInfo> itemDeliveryInfos = new ItemDeliveryInfo(itemDeliveryAudits, true, false);
List itemDeliveryAudits=//用于填充列表并传递给ctor的代码;
List itemDeliveryInfos=新的ItemDeliveryInfo(itemDeliveryAudits,true,false);
我假设我必须创建另一个重载构造函数来处理这个问题,但我对如何实现这一点感到茫然。任何帮助或指导都将不胜感激。如果您执行“new ItemDeliveryInfo”,您将始终获得“ItemDeliveryInfo”的单个实例。构造函数除了返回它的构造函数类型之外,无法返回任何其他内容-这样做显然是不可能的
List<ItemDeliveryInfo> itemDeliveryInfos = new ItemDeliveryInfo(itemDeliveryAudits, true, false);
List itemDeliveryInfos=new ItemDeliveryInfo(itemDeliveryAudits,true,false);
您可以通过创建静态方法或工厂来完成所需的工作,如下所示:
public static List<ItemDeliveryInfo> GetItemDeliveryInfo(List<ItemDeliveryAudits> audits) {
var list = new List<ItemDeliveryinfo>();
foreach (var deliveryAudit in audits)
{
list.Add(new ItemDeliveryInfo(deliveryAudit));
}
}
公共静态列表GetItemDeliveryInfo(列表审核){
var list=新列表();
foreach(审计中的var交付审计)
{
列表.添加(新项目DeliveryInfo(deliveryAudit));
}
}
只需使用LINQ和当前ctor即可:
List<ItemDeliveryInfo> itemDeliveryInfos =
itemDeliveryAudits.Select(i => new ItemDeliveryInfo(i, true, false)).ToList();
List itemDeliveryInfos=
itemDeliveryAudits.Select(i=>newitemDeliveryInfo(i,true,false)).ToList();
您可以使用LINQ:
List<ItemDeliveryAudits> itemDeliveryAudits = // code to populate list to pass to the ctor;
List<ItemDeliveryInfo> itemDeliveryInfos = itemDeliveryAudits
.Select(item => new ItemDeliveryInfo(item, true, false))
.ToList();
List itemDeliveryAudits=//用于填充列表并传递给ctor的代码;
List itemDeliveryInfos=itemDeliveryAudits
.选择(项=>new ItemDeliveryInfo(项,真,假))
.ToList();
太棒了,这很管用。感谢您的快速响应!