У меня есть SortedDictionary
событий, на которые люди могут купить билеты. Код события является уникальным для того билета, который хранится в качестве ключа.
protected SortedDictionary<int, Event> Events = new SortedDictionary<int, Event>();
Пример этого будет выглядеть так:
Events.Add(123, new Event(...));
Я реализовал регистратор, чтобы иметь возможность отслеживать событие. Который выглядит так:
class EventLogger
{
protected SortedDictionary<int, EventLogType[]> Events = new SortedDictionary<int, EventLogType[]>();
public EventLogger()
{
}
public void Log(int eventCode, EventLogType type)
{
KeyValuePair<int, EventLogType[]> e;
if (Events.ContainsKey(eventCode))
{
(e = Events.FirstOrDefault(x => x.Key.Equals(eventCode)))
.Value[e.Value.Count()] = type;
}
else Events.Add(eventCode, new EventLogType[] { type });
}
}
enum EventLogType
{
PURCHASE,
CREATE,
UPDATE,
DELETE
}
Когда, например, я создаю событие, мне нужно теперь вызвать этот метод журнала:
(new EventLogger()).Log(123, EventLogType.CREATE); // EventLogger instance is stored static
Что становится серьезной болью, когда я хочу обновить, удалить или создать. Я посмотрел на SO об изменении, как set
работает для массива, и попытался это:
protected SortedDictionary<int, Event> Events { get; set {
this.save();
} } = new SortedDictionary<int, Event>();
Но это выдает ошибку IDE:
Только инициализированные свойства могут иметь инициализаторы.
Как получить доступ к вызову set
до того, как что-либо будет сохранено или обновлено в массиве. Как я могу проверить, какое действие выполняется? Поэтому вместо того, чтобы делать вызов в журнал отдельно, это можно сделать в .Add
или когда его значение обновляется или удаляется?
Мой текущий код выглядит так:
Events.Add(123, new Event(...));
Logger.Log(123, EventLogType.CREATE);
Где, как я хочу, чтобы регистрировать создание, когда я просто звоню на .Add