В общем, имеются в программе события, одно из них-CollectionCountChanged, которое генерируется функцией OnCollectionCountChanged:
public void OnCollectionCountChanged(object source, CollectionEventHandlerArgs args)
{
if (CollectionCountChanged != null) CollectionCountChanged(source, args);
}
Visual Studio предлагает упростить вызов делегата:
public void OnCollectionCountChanged(object source, CollectionEventHandlerArgs args)
{
CollectionCountChanged?.Invoke(source, args);
}
Кто-то может объяснить, что делает эта шляпа? Ну или конкретно, что здесь делает "?". Благодарю заранее :)
CollectionCountChanged?.Invoke(source, args);
Такая конструкция эквивалентна следующей:
if(CollectionCountChanged != null)
{
CollectionCountChanged.Invoke(source, args);
}
Бывает особенно удобно, когда через точку много сущностей перечислено, чтобы не проверять каждую из них на null по очереди:
LevelOne?.LevelTwo?.LevelThree?...
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники