【问题标题】:How can I initialize int output in Dictionary TryGetValue如何在字典 TryGetValue 中初始化 int 输出
【发布时间】:2021-02-08 12:50:32
【问题描述】:

我今天打开我的旧项目,然后发现我有一个错误,但我记得我上次打开它时,它没有错误并且正在运行,这里是代码:

Dictionary<string, int> transactionItemDictionary = new Dictionary<string, int>();
            foreach (DataRow item in table.Rows) {
                if (!transactionItemDictionary.ContainsKey(item["Description"].ToString())) {
                    transactionItemDictionary.Add(item["Description"].ToString(), Convert.ToInt32(item["Quantity"]));
                } else {
                    transactionItemDictionary.TryGetValue(item["Description"].ToString(), out int count);
                    transactionItemDictionary.Remove(item["Description"].ToString());
                    transactionItemDictionary.Add(item["Description"].ToString(), count + Convert.ToInt32(item["Quantity"]));
                }
            }

我在网上查看了其他示例,此代码作为示例给出。

是什么导致了这个错误?

【问题讨论】:

    标签: c# winforms dictionary


    【解决方案1】:

    尝试在TryGetValue 调用之前声明count 变量:

    int count;
    transactionItemDictionary.TryGetValue(item["Description"].ToString(), out count);
    

    作为docs 状态:

    在 C# 6 及更早版本中,您必须在将变量作为输出参数传递之前在单独的语句中声明它。

    您尝试使用的语法从 C# 7.0 开始可用。

    【讨论】:

    • 是的,我已经尝试过了,它解决了我的问题,我只是好奇为什么它现在不工作了哈哈谢谢
    • @NicoTing 可能是旧版本的 VS?你用的是哪一个?
    • 其实我用的是2015版本的VS,但是当时我安装的是VS 2019
    【解决方案2】:

    您可以将整个if 替换为简单的=

    foreach (DataRow item in table.Rows) {
        transactionItemDictionary[item["Description"].ToString()] = Convert.ToInt32(item["Quantity"]);
    }
    

    The documentation 说:

    T值

    与指定键关联的值。如果找不到指定的键,get 操作会抛出 KeyNotFoundException,而 set 操作会使用指定的键创建一个新元素。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-27
      • 1970-01-01
      • 1970-01-01
      • 2011-02-17
      • 1970-01-01
      • 2013-03-31
      相关资源
      最近更新 更多