В моем коде, там стенография, которую я могу использовать, чтобы присвоить переменной значение свойства объекта, ТОЛЬКО ЕСЛИ объект не является несуществующим?
string username = SomeUserObject.Username; // fails if null
Я знаю, что могу сделать проверку как если (SomeUserObject! = пустой указатель), но я думаю, что видел сокращение от этого вида теста.
Я попробовал:
string username = SomeUserObject ?? "" : SomeUserObject.Username;
Но это не работает.
Ваш синтаксис во втором случае немного нарушен.
string name = SomeUserObject != null ? SomeUserObject.Username : string.Empty;
Вы можете использовать ? :, как предлагали другие, но вы можете рассмотреть паттерн Null object, где вы создаете специальный статический User User.NotloggedIn
и используете его вместо null везде.
Тогда станет просто всегда делать .Username
.
Другие преимущества: вы получаете / можете генерировать различные исключения для случаев (null), когда вы не присвоили переменную, и (not logged in), когда этому пользователю не разрешено что-то делать.
Ваш пользователь NotloggedIn может быть производным классом от User, скажем, NotLoggedIn, который переопределяет методы и выбрасывает исключения для вещей, которые нельзя делать, когда вы не вошли в систему, например, совершать платежи, отправлять электронные письма, ...
Как производный класс от User вы получаете довольно хороший синтаксический сахар, поскольку вы можете делать такие вещи, как if (someuser is NotLoggedIn) ...
Это, вероятно, ближе всего:
string username = (SomeUserObject != null) ? SomeUserObject.Username : null;
Ближе всего, я думаю, будет:
string username = SomeUserObject == null ? null : SomeUserObject.Username;
Вы думаете о тернарном операторе.
string username = SomeUserObject == null ? "" : SomeUserObject.Username;
См. http://msdn.microsoft.com/en-us/library/ty67wk28.aspx для получения дополнительных сведений.
Это называется нулевым объединением и выполняется следующим образом:
string username = SomeUserObject.Username ?? ""