0

我正在声明一个属性 - 当我在我的开发环境中工作时,它工作正常,但是当我访问暂存环境时,它总是返回 null。为什么会这样?代码在两种环境中都不会改变。这是代码。

private ProductCollection _productCollection;    

public ProductCollection ProdCollection
{
    get
    {
        _productCollection = MWProductReviewHelper.GetDistinctProductFromTill(StoreId, TDPId, ReceiptId);
        if (_productCollection.Count > 0)
            return _productCollection;
        else
            return null;
    }
}

private ProductCollection _guaranteedProductCollection = new ProductCollection();

public ProductCollection GuaranteedProductCollections
{
    get
    {
        if (_guaranteedProductCollection.Count > 0)
        {
            return _guaranteedProductCollection;
        }
        else
        {
            return _guaranteedProductCollection = MWProductGuaranteedHelper.CheckGuaranteedProductsFromList(ProdCollection);  // the problem appears to be here... 
        }
    }
}

我的访问是这样的。

if (GuaranteedProductCollections.Count > 0)
{
    ProductCollection _prodCollection = GuaranteedProductCollections; // return null
}

它里面总是有一个产品 - 当我输入断点时我可以看到这一点。

4

2 回答 2

2

您是否尝试过将那组设置在两条线上?看起来它可能会在设置完成之前返回。

public ProductCollection GuaranteedProductCollections
      {
        get
          {
            if (_guaranteedProductCollection.Count > 0)
              {
                 return _guaranteedProductCollection;
              }
            else
              {
                _guaranteedProductCollection = MWProductGuaranteedHelper.CheckGuaranteedProductsFromList(ProdCollection);  // the problem appears to be here... 
                return _guaranteedProductCollection;
              }
           }
      }
于 2012-08-16T09:21:29.637 回答
1

如果您的GuaranteedProductCollections属性返回 null 那么它一定是因为:

  • MWProductGuaranteedHelper.CheckGuaranteedProductsFromList(ProdCollection)正在返回 null。
  • 其他东西设置_guaranteedProductCollection为空(这不太可能,因为_guaranteedProductCollection在测试其计数时不为空,因为这会引发异常)

顺便说一句,通常在以这种方式初始化集合时,最好使用它null来表示未初始化的集合,以允许您的集合已初始化但为空的情况。我会像这样实现你的财产:

public ProductCollection GuaranteedProductCollections
{
    get
    {
        if (_guaranteedProductCollection == null)
        {
            _guaranteedProductCollection = WProductGuaranteedHelper.CheckGuaranteedProductsFromList(ProdCollection);
        }
        return _guaranteedProductCollection;
    }
}

这可以使用空合并 (??) 运算符简化为 1 行

public ProductCollection GuaranteedProductCollections
{
    get
    {
        return _guaranteedProductCollection
            ?? _guaranteedProductCollection = WProductGuaranteedHelper.CheckGuaranteedProductsFromList(ProdCollection);
    }
}
于 2012-08-16T09:44:17.530 回答