【问题标题】:Item has already been added. Key in dictionary: 'displayname' Key being added: 'displayname'项目已添加。字典中的键:'displayname' 正在添加的键:'displayname'
【发布时间】:2017-03-09 11:39:45
【问题描述】:

我正在使用 BlogEngine 为我工作的公司开发自定义博客。在此之前,一切似乎都运行良好,但现在每次尝试运行整个项目时都会抛出异常。

“System.ArgumentException”类型的异常发生在 mscorlib.dll 但未在用户代码中处理其他信息: 项目已添加。字典中的键:'displayname'键 正在添加:“显示名称”

这是引发异常的代码sn-p:

public override AuthorProfile SelectProfile(string id)
    {
        var dic = new StringDictionary();
        var profile = new AuthorProfile(id);

        // Retrieve Profile data from Db

        using (var conn = this.CreateConnection())
        {
            if (conn.HasConnection)
            {
                if (Blog.CurrentInstance.IsSiteAggregation)
                {
                    using (var cmd = conn.CreateTextCommand($"SELECT SettingName, SettingValue FROM {tablePrefix}Profiles WHERE UserName = {parmPrefix}name"))
                    {
                        cmd.Parameters.Add(conn.CreateParameter(FormatParamName("name"), id));

                        using (var rdr = cmd.ExecuteReader())
                        {
                            while (rdr.Read())
                            {
                                dic.Add(rdr.GetString(0), rdr.GetString(1));
                            }
                        }
                    }
                }
                else
                {
                    using (var cmd = conn.CreateTextCommand(string.Format("SELECT SettingName, SettingValue FROM {0}Profiles WHERE BlogID = {1}blogid AND UserName = {1}name", this.tablePrefix, this.parmPrefix)))
                    {
                        cmd.Parameters.Add(conn.CreateParameter(FormatParamName("blogid"), Blog.CurrentInstance.Id.ToString()));
                        cmd.Parameters.Add(conn.CreateParameter(FormatParamName("name"), id));

                        using (var rdr = cmd.ExecuteReader())
                        {
                            while (rdr.Read())
                            {
                                dic.Add(rdr.GetString(0), rdr.GetString(1));**[* EXCEPTION IS THROWN AT THIS LINE]**
                            }
                        }
                    }
                }
            }
        }

请问,我该如何解决?

【问题讨论】:

  • 错误信息不言自明! 项目已经添加所以你应该在插入新密钥之前检查。 if(dic.ConatinsKey(rdr.GetString(0)))

标签: c# dictionary key


【解决方案1】:

dic.Add()之前添加if子句

if (!dic.ConatinsKey(rdr.GetString(0)))

【讨论】:

  • 谢谢。这行得通。还要在名为 Profles 的 DB 表中跟踪问题。原来配置文件中有重复项
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-05
  • 1970-01-01
  • 2013-02-16
  • 2018-11-26
  • 2013-01-14
  • 1970-01-01
相关资源
最近更新 更多