C# 字典问题<;字符串,列表<;IRp>>;,覆盖数据
Hi I存储聊天对话的属性类型为:C# 字典问题<;字符串,列表<;IRp>>;,覆盖数据,c#,list,dictionary,C#,List,Dictionary,Hi I存储聊天对话的属性类型为: public Dictionary<string, List<IRp>> History { get; set; } 公共字典历史记录{get;set;} 键是尼克,列表是包含交流历史的集合 我使用存储这个SaveRp方法,IRp是实现消息类的接口 public void SaveRp(IRp rp) { if (!History.ContainsKey(rp.Nick)) {
public Dictionary<string, List<IRp>> History { get; set; }
公共字典历史记录{get;set;}
键是尼克,列表是包含交流历史的集合
我使用存储这个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);
}
}
public void SaveRp(IRp-rp)
{
如果(!History.ContainsKey(rp.Nick))
{
添加(rp.Nick,新列表{rp});
}
其他的
{
历史记录[rp.Nick]。添加(rp);
}
}
问题是我按此顺序为同一个Nick(例如Tom)存储消息:
1条短信:你好
2消息文本:如何
3信息文本:是
4短信:你呢?
问题是,如果我使用以下方法加载此nick的历史记录:
public IList<IRp> GetRps(string nick)
{
var result=new List<IRp>();
if (History.ContainsKey(nick))
{
result= History[nick];
}
return result;
}
public IList GetRps(字符串)
{
var result=新列表();
如果(历史,康纳斯基(尼克))
{
结果=历史[尼克];
}
返回结果;
}
我明白了:
1条短信:你呢?
2短信:你呢?
3条短信:你呢?
4短信:你呢?
我认为这个bug一定是在SaveRp方法中,并且以某种方式覆盖/重写了问题很可能是您正在更新添加到列表中的同一个Rp对象。将其添加到列表中时,将添加对对象的引用,这意味着如果该对象发生更改,则列表中的数据将发生更改 保存Rp后,应创建一个新实例
此外,类名、接口和属性应该使用全名,而不是缩写,以便任何接近您的代码的人都能理解正在发生的事情。我们需要查看更多代码。是否每次创建一个新的IRP实例,或者只是编辑现有的一个实例?考虑使用字典的TryGET方法来避免双字典查找。+ 1击败我。看起来OP使用的是
IRp
的同一个实例。谢谢,我一直在为message类使用同一个实例,并且只更改该类的string属性。如果我为每封邮件创建一个新的对象,它就解决了这个问题,这对我的英语来说是个遗憾。