我有一個簡單的方法來計算串列中專案之間的增長。發生了一些奇怪的事情,第一個和第二個轉儲將顯示第一個專案的不同結果。
好 1000/1300/0.3。
壞 1700/1300/-0.23。
我真的很難過,有人可以幫忙嗎?
void Main()
{
List<TestItem> items = new()
{
new() { EndDate = new DateTime(2020, 3, 31), CloseValue = 1300M },
new() { EndDate = new DateTime(2020, 6, 30), CloseValue = 1600M },
new() { EndDate = new DateTime(2020, 7, 31), CloseValue = 1700M },
};
var openValue = 1000M;
var completeItems =
items.Select(x =>
{
var item = new TestItem
{
EndDate = x.EndDate,
OpenValue = openValue,
CloseValue = x.CloseValue,
};
openValue = item.CloseValue;
return item;
});
completeItems.Dump();
completeItems.Dump();
}
class TestItem
{
public DateTime EndDate { get; set; }
public decimal OpenValue { get; set; }
public decimal CloseValue { get; set; }
public decimal Growth => (OpenValue == 0) ? 0 : (CloseValue - OpenValue) / OpenValue;
}
uj5u.com熱心網友回復:
這就是你困惑的原因:
var openValue = 1000M;
openValue = item.CloseValue;
在第一次迭代中,您的 openValue 為 1000M。在第一次迭代結束時,您將 openValue 設定為串列中最后一項的 closeValue,即 1700M。然后開始新的迭代將為您提供 1700M 的初始 openValue,這導致第一項的不同值。在運行函式之前重置 openValue 就可以了。
completeItems.Dump();
openValue = 1000M;
completeItems.Dump();
uj5u.com熱心網友回復:
這里沒有什么奇怪的 -completeItems是一個 Linq 查詢,當你呼叫.Dump()它時,查詢被執行并且你修改 openValue變數三次,最終分配它1700M(在第三次迭代中)。
當您.Dump()再次呼叫時,查詢將再次執行,但現在openValue的“起始”值為1700Mnot 1000M。因此,1700M第二次轉儲出現負增長。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/318192.html
上一篇:C#中的“列舉物件”是什么意思?
下一篇:將靜態列添加到動態LINQ查詢
