繁体   English   中英

向具有元组值的字典中的键添加多个值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM