C# - 短检查为null

Ale*_*dre 5 .net c#-4.0

如何替换以下代码

if (customer.Person!=null)
 Console.WriteLine(customer.Person.Name);
Run Code Online (Sandbox Code Playgroud)

有这样的东西

Console.WriteLine(customer.Person.Name?? "unknown");
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 11

你不能,我害怕 - 没有像Groovy的无效安全解除引用运算符:(

我想你可以为Person创建一个"空对象" - 即一个真实实例,但所有属性都为null.然后你可以使用:

Console.WriteLine((customer.Person ?? Person.Null).Name ?? "Unknown");
Run Code Online (Sandbox Code Playgroud)

......但那太可怕了.(它也没有检查是否为customer空.)

另一种选择是在Person上编写扩展方法:

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

然后:

Console.WriteLine(customer.Person.NameOrDefault("Unknown");
Run Code Online (Sandbox Code Playgroud)


HuB*_*eZa 5

您可以使用三元运算符:

Console.WriteLine(customer.Person != null ? customer.Person.Name : "unknown");
Run Code Online (Sandbox Code Playgroud)

不是最好看的代码,但仍然是单行.


编辑:不要忘记使用IsNullOrWhiteSpace,以防您的应用程序逻辑将空字符串和空字符串视为相同.