我有一段代码:
private List<...> LayPrices;
public Decimal BestLayOdds
{
get
{
if (LayPrices.Count > 0)
{
return LayPrices[0].dOdds;
}
return 1000.0M;
}
}
问题是,有时列表中存在项目,但它不会进入“if”语句。
请查看下面的调试会话图像:
https://istack.dev59.com/YLInR.webp 这怎么可能?
但是,如果我在最后一个返回语句中强制它返回第一个项目,则即使列表中有元素,我也会得到ArgumentOutOfRangeException。请查看下一个图像:
https://istack.dev59.com/DOhgN.webp 我的代码有问题还是只是愚蠢的错误?
更新:
LayPrices列表仅在类构造函数上实例化:```LayPrices = new List();```
它只在一个方法中填充了项目,其中包含以下代码:
LayPrices.Clear();
foreach (PriceSize priceSize in exchangePrices.availableToLay)
{
PriceStruct lay = new PriceStruct();
lay.dOdds = (Decimal)priceSize.price;
lay.dAmount = (Decimal)priceSize.size;
LayPrices.Add(lay);
}
并发问题和线程是我第一个怀疑的原因,所以我在lock(LayPrices)处加了锁,但问题仍然存在:
所以我认为这不是并发问题。
LayPrices
是如何实例化和填充的?有任何线程操作吗? - Patrick Hofman