[英]Adding more than one value to a Key in a Dictionary with Tuple Values
所以,我正在编写一个处理税收的程序。 我有一个字典,设置如下:
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));
Tuple
仅存储一组值。 你想要一个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));
}
注意:根据您的目标框架,您可能希望改用ValueTuple
。
元组类型 - C# 参考 | 微软文档
NB2:代码不是线程安全的。 您应该锁定该字段,或使用ConcurrentDictionary<Commodity, List<(DateTime, double)>>
代替。
NB3:由于您使用的是DateTime.Now
,因此您应该注意夏令时问题。 考虑使用DateTime.UtcNow
或改用DateTimeOffset
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.