VS предложил "упростить"
...
EventHandler<MyEventArgs> args = MyHandler
if (args != null)
{
args(this, e);
}
...
На
...
MyHandler?.Invoke(this, e)
...
Что это значит? Куда копать?
В С# 6 появился так называемый null propagation operator. Он позволяет упростить довольно утомительные проверки на null, и означает, что если выражение в его левой части равно null, то он вернёт null, а если оно имеет какое-то другое значение, то будет возвращено значение поля/свойства из правой части, либо будет выполнен метод из правой части. Согласитесь, что писать
data = some?.GetData();
явно удобнее, чем
if(some != null)
data = some.GetData();
Данная конструкция
MyHandler?.Invoke(this, e);
логически эквивалентна следующей
if ( MyHandler != null ) MyHandler.Invoke(this, e);
Такую же конструкцию ввели для оператора индексирования. Например
int[] a = null;
int? x = a?[0];
a = new int[1] { 10 };
int? b = a?[0];
Это средство появилось в новой версии C# 6.0
Ключевое слово null
является литералом, представляющим пустую ссылку, которая не ссылается ни на один объект. null
является значением по умолчанию переменных типа ссылок.
Для ключевого слова null
определены специальные операторы:
int? a;
null
для value type
. Вместо int
можно указать любой тип значения.obj?.SomeMethod();
obj
на null
и, если объект не равен null
, обращаемся к члену типа.?.
можно обращаться к индексатору ?[]
.int y = x ?? -1;
x != null
, берем его значение, иначе выполняем конструкцию справа от ??
, в данном случае устанавливаем y = -1
.Также можно комбинировать между собой:
int? length = customers?.Length ?? -1; // если customers != null, вернуть customers.Length, иначе вернуть -1
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Есть класс (1), в котором содержатся несколько приватных полей (назовем их цена, количество, цвет)Для них уже сделаны геттеры