初始化嵌套列表<t>

时间:2018-05-28 09:43:33

标签: c# arrays list initialization

请参阅以下代码

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并绑定机柜列表中返回的MINMAX值。 ProductDM填充MIN和MAX金额,但在将这些金额分配给CabinetList时,会返回错误。

这是因为CabinetList最初是空的,并且它没有显示其中的MIN MAX属性。

Issue

我使用上面的代码来分配数据但返回

  

对象引用未设置为对象的实例。

因为CabinetList为空。

如何在这里初始化橱柜列表???

3 个答案:

答案 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会阻止

  

对象引用未设置为对象的实例。

异常。

除此之外,不是通过索引访问器分配MinMax值:

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>个对象列表,但概念类似。