向具有元组值的字典中的键添加多个值
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));
A 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
。
Tuple types - C# reference | Microsoft Docs
NB2: 该代码不是线程安全的。您应该锁定该字段,或者改用 ConcurrentDictionary<Commodity, List<(DateTime, double)>>
。
NB3: 由于您正在使用 DateTime.Now
,您应该注意夏令时问题。考虑使用 DateTime.UtcNow
或改用 DateTimeOffset
。
所以,我正在编写一个处理税收的程序。 我有一个字典,其设置如下:
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));
A 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
。
Tuple types - C# reference | Microsoft Docs
NB2: 该代码不是线程安全的。您应该锁定该字段,或者改用 ConcurrentDictionary<Commodity, List<(DateTime, double)>>
。
NB3: 由于您正在使用 DateTime.Now
,您应该注意夏令时问题。考虑使用 DateTime.UtcNow
或改用 DateTimeOffset
。