gpt4 book ai didi

c# - Dictionary> 问题,覆盖数据

转载 作者:行者123 更新时间:2023-11-30 14:18:12 24 4
gpt4 key购买 nike

您好,我将聊天对话存储在属性类型中:

  public Dictionary<string, List<IRp>> History { get; set; }

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

我在存储上使用这个SaveRp方法,IRp是实现消息类的接口(interface)。

    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 消息正文:您好

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 方法中并且以某种方式覆盖/重写

最佳答案

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

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

此外,类名、接口(interface)和属性应该使用全名,而不是缩写,这样任何接近您代码的人都可以理解正在发生的事情。

关于c# - Dictionary<string, List<IRp>> 问题,覆盖数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4874295/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com