【问题标题】:Adding more than one value to a Key in a Dictionary with Tuple Values向具有元组值的字典中的键添加多个值
【发布时间】:2022-01-11 17:19:34
【问题描述】:

所以,我正在编写一个处理税收的程序。 我有一个字典,设置如下:

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));

【问题讨论】:

    标签: c# dictionary tuples


    【解决方案1】:

    Tuple 仅存储一组值。你想要一个Dictionary&lt;Commodity, List&lt;Tuple&lt;DateTime, double&gt;&gt;

    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&lt;Commodity, List&lt;(DateTime, double)&gt;&gt;

    NB3:由于您使用的是DateTime.Now,因此您应该注意夏令时问题。考虑改用DateTime.UtcNow 或改用DateTimeOffset

    【讨论】:

    • 感谢您的回答!难怪我不能用我的元组保存多个值,呵呵。
    • 元组列表字典,让我头疼。只需制作一个适当的课程,就更容易阅读了。
    • @DavidG 我通常会同意,特别是如果类型暴露在课堂之外。否则,带有命名值的 ValueTupleList&lt;(DateTime date, double rate)&gt;record 将是比旧的 Tuple&lt;DateTime, double&gt; 更好的选择。
    • 老实说,这是一个任务。这绝不会在现实生活中使用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-14
    • 2021-01-28
    • 1970-01-01
    • 1970-01-01
    • 2021-05-09
    • 2014-01-05
    相关资源
    最近更新 更多