Нулевой условный оператор C# 6 для сбоя метода
Следующее (C# Interactive) компилируется, но взрывается. Не уверен, что мне не хватает...
class Test { public Func<object> GetSomething = null; }
var t = new Test();
var result = t?.GetSomething();
2 ответа
Решение
Конечно, это так!
По вашему коду, t
не является null
, так ?.
избыточно
Но t.GetSomething
нет. Вот что бросает NullReferenceException
,
То, что вы ищете, это:
var result = t.GetSomething?.Invoke();
Чтобы увидеть, как реализованы новые функции C# 6, взгляните на мою статью.
Я думаю, вы неправильно поняли, как работает этот оператор.
var result = t?.GetSomething();
Вот t?.
означает "если t
нуль, остановитесь прямо здесь и верните ноль; в противном случае разыменование t
и получить член GetSomething
,
Теперь вы ничего не проверяете на GetSomething
, Вместо этого вы можете сделать:
var result = t?.GetSomething?.Invoke();