3 c# dictionary list
嗨,我在以下属性类型中存储聊天对话:
public Dictionary<string, List<IRp>> History { get; set; }
Run Code Online (Sandbox Code Playgroud)
Key是nick,List是包含通信历史的集合.
我在商店使用这个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);
}
}
Run Code Online (Sandbox Code Playgroud)
问题是我按照这个顺序为同一个Nick(例如Tom)存储消息:
问题是如果我使用此方法加载此缺口的历史记录:
public IList<IRp> GetRps(string nick)
{
var result=new List<IRp>();
if (History.ContainsKey(nick))
{
result= History[nick];
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
我明白了:
我认为bug必须在SaveRp方法中,并以某种方式覆盖/重写
问题可能是您正在更新添加到列表中的相同Rp对象.当它被添加到列表中时,会添加对该对象的引用,这意味着如果它被更改,则列表中的数据会发生变化.
保存Rp后,您应该创建一个新实例.
此外,类名,接口和属性应使用全名,而不是缩写,以允许任何接近您的代码的人了解正在发生的事情.
| 归档时间: |
|
| 查看次数: |
374 次 |
| 最近记录: |