我正在随机生成一个Sales对象列表:
public class Sale
{
public string Name { get; set; }
public List<Product> Products { get; set; }
public decimal Value
{
get { return Products.Sum(p => p.Price); }
}
}
public class Product
{
public decimal Price { get; set; }
}
使用此设置:
private void SetProducts()
{
var seed = (int)(DateTime.UtcNow.Ticks | 0x0000FFFF);
var random = new Random(seed);
Products = new List<Product>();
for(var i = 0; i < 100; i++)
{
Products.Add(new Product
{
Price = random.Next(500, 1500)
});
}
}
private void SetSales()
{
Sales = new List<Sale>();
for(var i = 0; i < 100; i++)
{
Sales.Add(new Sale{
Name = "Sale #" + i,
Products = GetProducts()
}
}
}
private List<Product> GetProducts()
{
var seed = (int) (DateTime.UtcNow.Ticks | 0x0000FFFF);
var random = new Random(seed);
var max = random.Next(1, 7);
var products = new List<Product>();
for(var i = 0; i < max; i++)
{
products.Add(Products[random.Next(Products.Count)];
}
return products;
}
public Dashboard()
{
SetProducts();
SetSales();
}
当我评估这些销售价值时,它们都具有完全相同的价值。当我浏览调试器并对它们进行评估时,评估的销售额具有正确的值,但是评估等待直到将此对象传递给View(这是模拟MVC仪表板的一部分)的所有销售的所有数据都是相同。这让我相信Products
字段是懒惰计算的,但我该如何解决这个问题呢?我的印象是,如果我使用不同的Enumerable,这可能是一个问题,但我认为List<T>
不会有这个问题。
编辑:我还想提一下,即使产品领域是懒惰地计算,我也很难相信所有的计算都是在相同的时间内完成的。刻度应该在100ns左右,虽然我知道C#是一种非常有效的语言,但我很难相信它可以在不到100ns的时间内完成所有这些。