请参阅以下代码
List<ProductDM> productDMList = _orderRepo.GetProductList(32, 12);
for (int i=0;i<productDMList.Count;i++)
{
productDMList[i].CabinetList[i].Min = productDMList[i].Min;
productDMList[i].CabinetList[i].Max = productDMList[i].Max;
}
public class ProductDM
{
public List<InventoryDM> CabinetList { get; set; }
public double Min { get; set; }
public double Max { get; set; }
}
public class InventoryDM
{
public Double Min { get; set; }
public Double Max { get; set; }
}
要求是遍历productDMList
并绑定机柜列表中返回的MIN
和MAX
值。 ProductDM
填充MIN和MAX金额,但在将这些金额分配给CabinetList时,会返回错误。
这是因为CabinetList最初是空的,并且它没有显示其中的MIN MAX属性。
我使用上面的代码来分配数据但返回
对象引用未设置为对象的实例。
因为CabinetList为空。
如何在这里初始化橱柜列表???
答案 0 :(得分:2)
根据您的要求,您可以执行类似的操作
public class ProductDM
{
public List<InventoryDM> CabinetList { get; private set; }
public double Min { get; set; }
public double Max { get; set; }
public ProductDM()
{
CabinetList = new List<InventoryDM>();
}
}
或者如果您从外部来源获取CabinetList
数据,例如数据库:
public class ProductDM
{
private List<InventoryDM> _cabinetList = null;
public double Min { get; set; }
public double Max { get; set; }
public List<InventoryDM> CabinetList
{ get
{
if(_cabinetList == null)
{
_cabinetList = ... // retrieve data from external source
}
return _cabinetList;
}
}
}
答案 1 :(得分:2)
由于Marco Forberg's answer states初始化构造函数中的CabinetList
会阻止
对象引用未设置为对象的实例。
异常。
除此之外,不是通过索引访问器分配Min
和Max
值:
productDMList[i].CabinetList[i].Min = productDMList[i].Min;
productDMList[i].CabinetList[i].Max = productDMList[i].Max;
您应该使用Add()
类型的List<>
方法:
productDMList[i].CabinetList.Add(new InventoryDM { Min = productDMList[i].Min, Max = productDMList[i].Max });
否则你会得到一个
ArgumentOutOfRangeException
因为您尝试访问列表中尚不存在的项目。
答案 2 :(得分:1)
问题不在于CabinetList的空虚,而是在调试器中可以看到对象列表为空。
要初始化列表,您可以参考这篇文章的答案:
How to initialize a C# string list (List<string>) with many string values
请注意,您没有字符串列表,但有<InventoryBM>
个对象列表,但概念类似。