C # - короткая проверка на ноль - PullRequest
5 голосов
/ 24 марта 2011

Как заменить следующий код

if (customer.Person!=null)
 Console.WriteLine(customer.Person.Name);

с чем-то вроде этого

Console.WriteLine(customer.Person.Name?? "unknown");

Ответы [ 2 ]

11 голосов
/ 24 марта 2011

Боюсь, вы не можете - нет ничего лучше нулевого безопасного оператора разыменования Groovy: (

Полагаю, вы могли бы создать для Person "нулевой объект" - то есть реальный экземпляр, но со всеми свойствами null. Тогда вы можете использовать:

Console.WriteLine((customer.Person ?? Person.Null).Name ?? "Unknown");

... но это довольно ужасно. (Это также не проверяет, является ли customer нулевым.)

Другой вариант - написать метод расширения для Person:

public static string NameOrDefault(this Person person, string defaultName)
{
    return person == null ? defaultName : person.Name ?? defaultName;
}

Тогда:

Console.WriteLine(customer.Person.NameOrDefault("Unknown");
5 голосов
/ 24 марта 2011

Вы можете использовать троичный оператор :

Console.WriteLine(customer.Person != null ? customer.Person.Name : "unknown");

Не самый красивый код, но все же однострочный.


Редактировать: не забудьте использовать IsNullOrWhiteSpace , если логика вашего приложения обрабатывает пустые и нулевые строки одинаково.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...