Что обозначает следующая запись, а точнее занак "?" в ней?
delegate void MessagesRecievedDelegate(
VkApi owner, ReadOnlyCollection<Message> messages);
static event MessagesRecievedDelegate NewMessages;
...
NewMessages?.Invoke(vkApi, history.Messages);
Это т.н. оператор Элвиса, он же null propagation operator
. Позволяет избегать NullReferenceException
. Работает он так: при попытке получить значение после ?.
- он получает доступ к члену если объект до оператора не null
, в противном случае выражение получает значение null
- и цепочка вызовов не продолжается (в случае если там много таких операторов - obj1?.rec1?.rec2
если obj1
== null - дальнейшая цепочка не будет вычисляться - все выражение будет null). Оператор был введен в C# 6
. Хорошо работает в связке с оператором ??
. Позволяя творить такие штуки:
var minPrice = product?.PriceBreaks?[0]?.Price ?? 0;
В старых версиях языка - такая конструкция была бы жутким нагромождением вложенных условных переходов с проверками.
В вашем же случае, это просто защита от того, что на событие нет подписчиков, без этого оператора в случае если подписчиков нет - приложение бы выпало с ошибкой, а с ним событие попросту не возникает.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Как сделать сравнение строк (string) на большие или меньшие?
ЗдравствуйтеПодскажите, как можно посмотреть свойства файла на подобии тех, что появляются в окошке, когда жмешь правой кнопкой мыши по файлу,...
РисуюImage на PictureBox, я сделал возможность лепить Image пользователю на PictureBox самому, чтобы он выбирал место (X, Y) где хочет
Столкнулся с проблемой рисования в UWPПо задумке, на странице будет область, где можно располагать заранее нарисованные фигуры, которые были...