Добавление события before в IDictionary или класс

Можно ли создать событие до добавления или обновления элемента в IDictionary?

public static IDictionary<string, Aircraft> aircraftList = new Dictionary<string, Aircraft>();

и я использую это так

MainForm.aircraftList[acNumber].FlightStatus = strFlying;

То, что я хочу сделать, это не обновлять значение, если новое значение равно NULL, пустой строке или int == 0

Самолет - это класс со множеством значений, представляющих собой сочетание строк типа int и double...

или есть способ сделать этот тип действия в классе?

в настоящее время я делаю это везде, я присваиваю значение с помощью оператора if, я предполагаю, что есть лучший способ?

2 ответа

Решение

Вы могли бы выкатить свой собственный Dictionary класс и использовать обычай Add() функция (и другие функции). Что-то вроде этого:

class MyCustomDictionary : Dictionary<string, Aircraft>
{
  public new Add(string key, Aircraft value)
  {
    if (YOUR_CONDITION)
    {
      base.Add(key, value);
    }
  }
}

Вы должны отметить использование new Ключевое слово здесь. Add() функция не может быть переопределена, потому что базовый класс не определяет ее как overridable, Так что вы должны использовать new в вашем определении.

Я должен быть честным с вами, я немного запутался в том, что вы запрашиваете... Однако я заметил пару проблем с вашим примером кода, которые могут быть причиной проблемы, с которой вы столкнулись?

Прежде всего, IDictionary - это интерфейс объекта коллекции, и все же вы рассматриваете его как массив, что для меня немного подозрительно.

Во-вторых, Aircraft - это класс, и все же вы не инициализируете его при установке значения в FlightStatus.

Итак, что вы должны сделать, это либо:

aircraftList.Add(strKey, new Aircraft() {FlightStatus = strFlying});

или же

Aircraft ac = new Aircraft();

// set the ac values
ac.FlightStatus = strFlying;

aircraftList.Add(strKey, ac);

Вы можете добавить условный оператор перед добавлением объекта в словарь.

Наконец, что вы имеете в виду, когда спрашиваете о добавлении события до? Если вы последуете примеру dotNET, вы можете добавить свой собственный метод OnBeforeEvent /Invoke() в объявление метода Add().

Другие вопросы по тегам