首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Dictionary<string、List<IRp>>、覆盖数据的问题

Dictionary<string、List<IRp>>、覆盖数据的问题
EN

Stack Overflow用户
提问于 2011-02-02 20:09:18
回答 1查看 375关注 0票数 3

嗨,我将聊天对话存储在以下属性类型中:

代码语言:javascript
复制
  public Dictionary<string, List<IRp>> History { get; set; }

Key是nick,List是包含通信历史的集合。

我用来存储这个SaveRp方法,IRp是实现message类的接口。

代码语言:javascript
复制
    public void SaveRp(IRp rp)
    {
        if (!History.ContainsKey(rp.Nick))
        {
            History.Add(rp.Nick, new List<IRp> { rp });
        }
        else
        {
            History[rp.Nick].Add(rp);
        }
    }

问题是我在这个序列中为一个相同的Nick(例如Tom)存储消息:

1消息正文: Hello

2消息文本:如何

3消息文本:是

4消息文本:你?

问题是,如果我用这种方法加载这个nick的历史记录:

代码语言:javascript
复制
    public IList<IRp> GetRps(string nick)
    {
        var result=new List<IRp>();
        if (History.ContainsKey(nick))
        {
           result= History[nick];
        }
        return result;
    }

我明白了:

1条短信文本:你?

2短信正文:你?

3短信正文:你?

4消息文本:你?

我认为错误一定是在SaveRp方法中,并且以某种方式覆盖/重写

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-02-02 20:13:57

问题很可能是您正在更新添加到列表中的同一Rp对象。当它被添加到列表中时,会添加对该对象的引用,这意味着如果它发生了更改,则列表中的数据也会发生更改。

保存Rp后,您应该创建一个新实例。

此外,类名、接口和属性应该使用全名,而不是缩写,以便让任何接触过您的代码的人都能理解正在发生的事情。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4874295

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档