2015-08-25 2 views
6

Из того, что я собрал с новым null оператора в C# 6.0 вы можете сделать что-то вроде этого:C# 6,0 нулевого оператора в условном операторе

string name = people.FirstOrDefault()?.FullName; 

И это замечательно, но одна проверки, я часто сталкиваюсь есть что-то вроде этого:

object name = null; 
if(name != null) { 
    DoSomething(); 
} else { 
    DoSomethingElse(); 
} 

Учитывая цель нового оператора null, я хотел бы что-то подобное должно быть возможно:

if(name?) { 
    DoSomething(); 
} else { 
    DoSomethingElse(); 
} 

Проблема здесь от того, что я понял, что, когда значение по ? проверяет, на самом деле null, он возвращает null, и вам необходимо bool условие if заявления. Поскольку вы не можете напрямую конвертировать null в bool, существует ли более простой способ проверки этого без if(name != null) с использованием нового оператора null в C# 6.0?

+12

Серьезно? Ввести '! = Null' недостаточно просто? Понятно, что это понятно, разработчик, который просматривает код через шесть месяцев, может легко понять, что он делает ... –

+3

Какова была бы цель такого оператора? В чем преимущество написания 'if (name?) ...' в отличие от 'if (name! = Null)' –

+0

В JS вы можете просто выполнить 'if (name)' и он проверяет значение 'null', казалось для меня что-то близкое было бы неплохо, и что это может быть в новом обновлении, не думаю. –

ответ

13

Нет смысла делать это. Вы не делаете никакого коллаборации в своем примере - вы просто проверяете значение null.

Лучше использовать, если вы хотите проверить какой-либо элемент объекта name. Например:

if (name?.FirstName != null) ... 

Но как вы можете видеть, это все-таки простое сравнение для нуля - мы просто использовали нуль коалесценции, чтобы избежать того, чтобы написать что-то вроде этого:

if (name != null && name.FirstName != null) ... 
+0

Я согласен с тем, что это не было бы лучше использовать эту функцию, однако я собирался сделать что-то гораздо более простое, что-то вроде' if (name) 'в JS, где он автоматически проверяет значение« null ». Спасибо за ответ. –

+0

Мне нравится делать что-то вроде: if (Session? .Connected) {}, но, к сожалению, это не поддерживается, и вам нужно сделать что-то вроде: if (Session? .Connected == true) {} – juFo

+3

@juFo Это своего рода очевидное , если вы думаете об этом - поскольку вы используете коалесцирующий оператор, 'bool' превращается в' bool? '(' null' должен распространяться через все пустые коалесценты). И 'if (default (bool?))' Делает такой же смысл, как и разрешение 'if (null)' - то есть не много. То, что вы * можете * сделать, это использовать '(session? .Connected) .GetValueOrDefault (false)' - это намного более явный, чем просто 'a == true'. – Luaan