嗨,我将聊天对话存储在以下属性类型中:
public Dictionary<string, List<IRp>> History { get; set; }Key是nick,List是包含通信历史的集合。
我用来存储这个SaveRp方法,IRp是实现message类的接口。
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的历史记录:
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方法中,并且以某种方式覆盖/重写
发布于 2011-02-02 20:13:57
问题很可能是您正在更新添加到列表中的同一Rp对象。当它被添加到列表中时,会添加对该对象的引用,这意味着如果它发生了更改,则列表中的数据也会发生更改。
保存Rp后,您应该创建一个新实例。
此外,类名、接口和属性应该使用全名,而不是缩写,以便让任何接触过您的代码的人都能理解正在发生的事情。
https://stackoverflow.com/questions/4874295
复制相似问题