【发布时间】:2011-02-02 12:09:17
【问题描述】:
您好,我将聊天对话存储在以下属性类型中:
public Dictionary<string, List<IRp>> History { get; set; }
Key 是 nick,List 是包含通信历史的集合。
我在 store 上使用了这个 SaveRp 方法,IRp 是实现消息类的接口。
public void SaveRp(IRp rp)
{
if (!History.ContainsKey(rp.Nick))
{
History.Add(rp.Nick, new List<IRp> { rp });
}
else
{
History[rp.Nick].Add(rp);
}
}
问题是我按这个顺序为同一个尼克(例如汤姆)存储消息:
1 条消息文本:你好
2 消息文本:如何
3 消息文本:是
4 条消息文本:你?
问题是如果我用这个方法加载这个昵称的历史记录:
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 方法中,并且以某种方式覆盖/重写
【问题讨论】:
-
我们需要查看更多代码。您是每次都创建一个新的 IRp 实例还是只编辑现有的实例?
-
考虑使用字典的 TryGet 方法,避免双重字典查找。
标签: c# list dictionary