2011-03-24 27 views

回答

11

將以下代碼

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

你不能,我怕 - 沒有什麼能像Groovy的空值安全的引用運算符:(

我想你可以爲Person創建一個「空對象」 - 也就是一個真實的實例,但是所有的屬性都是null。那麼你可以使用:

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

......但那真是太可怕了。 (它也沒有檢查customer被空。)

另一種選擇是寫在人的擴展方法:

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

然後:

Console.WriteLine(customer.Person.NameOrDefault("Unknown"); 
+0

「Person.Null」是什麼意思? – Alexandre 2011-03-24 07:45:49

+0

@Alex:這將是Person類中的一個靜態屬性,返回特殊的「null對象」Person引用,該引用的所有屬性都爲null。 – 2011-03-24 07:46:33

+0

@Alex:這是一個靜態屬性,返回表示「無人」的Person實例。這是[空對象模式](http://en.wikipedia.org/wiki/Null_Object_pattern)。 – Richard 2011-03-24 07:47:37

5

您可以使用ternary operator

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

不是最好看的代碼,但仍然一個班輪。


編輯:不要忘記使用IsNullOrWhiteSpace,如果你的應用程序邏輯將空&空字符串相同。