Как присвоить значение свойства к var, ТОЛЬКО ЕСЛИ объект не является несуществующим

В моем коде, там стенография, которую я могу использовать, чтобы присвоить переменной значение свойства объекта, ТОЛЬКО ЕСЛИ объект не является несуществующим?

string username = SomeUserObject.Username;     // fails if null

Я знаю, что могу сделать проверку как если (SomeUserObject! = пустой указатель), но я думаю, что видел сокращение от этого вида теста.

Я попробовал:

string username = SomeUserObject ?? "" : SomeUserObject.Username;

Но это не работает.

5
задан Michael Petrotta 11 April 2010 в 05:58
поделиться

6 ответов

Ваш синтаксис во втором случае немного нарушен.

string name = SomeUserObject != null ? SomeUserObject.Username : string.Empty;
3
ответ дан 14 December 2019 в 04:33
поделиться

Вы можете использовать ? :, как предлагали другие, но вы можете рассмотреть паттерн Null object, где вы создаете специальный статический User User.NotloggedIn и используете его вместо null везде.

Тогда станет просто всегда делать .Username.

Другие преимущества: вы получаете / можете генерировать различные исключения для случаев (null), когда вы не присвоили переменную, и (not logged in), когда этому пользователю не разрешено что-то делать.

Ваш пользователь NotloggedIn может быть производным классом от User, скажем, NotLoggedIn, который переопределяет методы и выбрасывает исключения для вещей, которые нельзя делать, когда вы не вошли в систему, например, совершать платежи, отправлять электронные письма, ...

Как производный класс от User вы получаете довольно хороший синтаксический сахар, поскольку вы можете делать такие вещи, как if (someuser is NotLoggedIn) ...

1
ответ дан 14 December 2019 в 04:33
поделиться

Это, вероятно, ближе всего:

string username = (SomeUserObject != null) ? SomeUserObject.Username : null;
1
ответ дан 14 December 2019 в 04:33
поделиться

Ближе всего, я думаю, будет:

string username = SomeUserObject == null ? null : SomeUserObject.Username;
2
ответ дан 14 December 2019 в 04:33
поделиться

Вы думаете о тернарном операторе.

string username = SomeUserObject == null ? "" : SomeUserObject.Username;

См. http://msdn.microsoft.com/en-us/library/ty67wk28.aspx для получения дополнительных сведений.

0
ответ дан 14 December 2019 в 04:33
поделиться

Это называется нулевым объединением и выполняется следующим образом:

string username = SomeUserObject.Username ?? ""
-1
ответ дан 14 December 2019 в 04:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: