LINQ - установить элемент в словаре пустым, где значение DateTime самое старое - PullRequest
0 голосов
/ 17 ноября 2009

У меня есть Dictionary<string, XMLMessage>, где XMLMessage - это структура:

    private struct XMLMessage
    {
        public string Message { get; set; }
        public DateTime TimeRead { get; set; }
    }

Я буду использовать словарь, подобный этому:

storedMessages["1X"] = new XMLMessage() { Message = "<XML>1X</XML>", TimeRead = DateTime.Now };
storedMessages["1Y"] = new XMLMessage() { Message = "<XML>1Y</XML>", TimeRead = DateTime.Now };

Между объектами словаря, присваивающими значение, будет промежуток в секундах, следовательно, объект DateTime.

В какой-то момент мне нужно сохранить ключи в Словаре, но самое старое значение должно быть пустым.

Я пробовал это, но, похоже, не совсем правильно.

storedMessages.Where(x => x.Key.Contains("1")).OrderBy(s => s.Value.TimeRead).Skip(1)

Спасибо

ОБНОВЛЕНИЕ: Я думаю, что могу сделать что-то подобное, но хотел узнать ваше мнение

var j = storedMessages.Where(x => x.Key.Contains("1")).OrderByDescending(s => s.Value.TimeRead).First().Key;
storedMessages[j] = new XMLMessage();

1 Ответ

1 голос
/ 17 ноября 2009

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

Я бы настоятельно не рекомендовал бы вам использовать изменяемые структуры. Либо используйте класс, либо измените структуру на неизменную.

Пример создания класса:

private class XmlMessage
{
    public string Message { get; set; }
    public DateTime TimeRead { get; set; }
}

Пример создания неизменной структуры:

private struct XmlMessage
{
    private readonly string message;
    private readonly DateTime timeRead;

    public string Message { get { return message; } }
    public DateTime TimeRead { get { return timeRead; } }

    public XmlMessage(string message, DateTime timeRead)
    {
        this.message = message;
        this.timeRead = timeRead;
    }
}

Конечно, вместо этого вы могли бы сделать этот класс неизменным ...

...