如何替换以下代码
if (customer.Person!=null)
Console.WriteLine(customer.Person.Name);
有这样的东西
Console.WriteLine(customer.Person.Name?? "unknown");
答案 0 :(得分:11)
你不能,我害怕 - 没有什么比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");
答案 1 :(得分:5)
您可以使用ternary operator:
Console.WriteLine(customer.Person != null ? customer.Person.Name : "unknown");
不是最好看的代码,但仍然是单行代码。
编辑:请不要忘记使用IsNullOrWhiteSpace,以防您的应用程序逻辑处理空& null字符串相同。