Проблема со словарем <строка, список <IRp>>, перезапись данных - PullRequest
3 голосов
/ 02 февраля 2011

Привет, я храню разговор в чате в типе свойства:

  public Dictionary<string, List<IRp>> History { 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);
        }
    }

Проблема в том, что я храню сообщения в этой последовательности для одного и того же Ника (например, Тома):

1 текст сообщения: Hello

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 и как-то перезаписывать / перезаписывать

1 Ответ

7 голосов
/ 02 февраля 2011

Возможно, проблема в том, что вы обновляете тот же объект Rp, который добавляется в список.Когда он добавляется в список, добавляется ссылка на объект, что означает, что если он изменяется, то данные в списке изменяются.

После сохранения вашего Rp вы должны создать новый экземпляр.

Кроме того, имена классов, интерфейсы и свойства должны использовать полные имена, а не сокращения, чтобы кто-нибудь, кто когда-либо подходил к вашему коду, мог понять, что происходит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...