Добавление события 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().