Вопрос по синтаксису вызова делегата в c# [дубликат]

123
18 апреля 2022, 07:40
На этот вопрос уже даны ответы здесь:
Помогите разобраться, не понимаю, что значит подобная строка в коде (2 ответа)
Закрыт 1 год назад.

В общем, имеются в программе события, одно из них-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);
    }

Кто-то может объяснить, что делает эта шляпа? Ну или конкретно, что здесь делает "?". Благодарю заранее :)

Answer 1
CollectionCountChanged?.Invoke(source, args);

Такая конструкция эквивалентна следующей:

if(CollectionCountChanged != null)
{
    CollectionCountChanged.Invoke(source, args);
}

Бывает особенно удобно, когда через точку много сущностей перечислено, чтобы не проверять каждую из них на null по очереди:

LevelOne?.LevelTwo?.LevelThree?...
READ ALSO
Как переписать данные файла

Как переписать данные файла

Формат содержимого файла: дата,фамилия сотрудника,кол-во часов роботы,проделанная работа

182
Путь содержит недопустимые знаки C#

Путь содержит недопустимые знаки C#

При обращении к файлу выдает исключение:

163
Unity Вопрос про Scene и Game

Unity Вопрос про Scene и Game

подскажите, может кто знает, почему когда запускаешь Game в Unity вся механика игры работает, а когда пытаешься реализовать механику в окне Scene ничего...

145
Почему я получаю эту ошибку? (BLAZOR C #)

Почему я получаю эту ошибку? (BLAZOR C #)

Я попытался запустить следующий компонент и получил ошибку, которая сбрасывает все мое программное обеспечение:

149