所以,我正在撰寫一個處理稅收的程式。我有一個字典,設定如下:
static Dictionary<Commodity, Tuple<DateTime, double>> _TaxRates = new Dictionary<Commodity, Tuple<DateTime, double>>();
商品是處理不同稅收領域(食品、酒精、運輸等)的列舉。現在,我想添加一個新的稅率,以及添加稅率的日期時間。
例如,酒精的稅率在 17:00 時可能是 0.25%,但在 17:25 時卻是 0.50%。
_TaxRates [commodity].Add(new Tuple<DateTime, double>(DateTime.Now, rate));
這給了我一個錯誤。
_TaxRates[commodity] = Tuple.Create(DateTime.Now, rate);
這似乎只是覆寫了舊值,這意味著酒精只有一個稅率。非常感謝任何幫助或提示。
“完整代碼”如下:
static Dictionary<Commodity, Tuple<DateTime, double>> _TaxRates= new Dictionary<Commodity, Tuple<DateTime, double>>();
public void SetCustomTaxRate(Commodity commodity, double rate)
{
_TaxRates[commodity].Add(new Tuple<DateTime, double>(DateTime.Now, rate));
uj5u.com熱心網友回復:
ATuple僅存盤一組值。你想要一個Dictionary<Commodity, List<Tuple<DateTime, double>>。
private static readonly Dictionary<Commodity, List<Tuple<DateTime, double>> _TaxRates = new();
public void SetCustomTaxRate(Commodity commodity, double rate)
{
if (!_TaxRates.TryGetValue(commodity, out var list))
{
list = new List<Tuple<DateTime, double>>();
_TaxRates[commodity] = list;
}
list.Add(new Tuple<DateTime, double>(DateTime.Now, rate));
}
注意:根據您的目標框架,您可能希望使用 aValueTuple代替。
元組型別 - C# 參考 | 微軟檔案
NB2:代碼不是執行緒安全的。您應該鎖定該欄位,或使用 aConcurrentDictionary<Commodity, List<(DateTime, double)>>代替。
NB3:由于您使用的是DateTime.Now,因此您應該注意夏令時問題。考慮改用DateTime.UtcNow或DateTimeOffset改用。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/408713.html
標籤:
