2010-04-11 49 views
5

在我的代碼分配給一個變種,是沒有辦法,我可以用它來分配變量的對象的屬性值的簡寫僅當對象ISN」 t null?如何屬性的值僅當對象不是null

string username = SomeUserObject.Username;  // fails if null 

我知道我可以做一個檢查,如果(SomeUserObject!= null),但我認爲我看到了這種測試的簡寫。

我想:

string username = SomeUserObject ?? "" : SomeUserObject.Username; 

但是,這並不工作。

+0

在第二,你在想這兩個空合併運算符*和*條件運算符。不幸的是,你已經成功地將它們組合成非法代碼。有關條件運算符的用法,請參閱下面的答案。 – 2010-04-11 06:04:44

回答

3

你的第二語法稍微偏離。

string name = SomeUserObject != null ? SomeUserObject.Username : string.Empty; 
-1

這就是所謂的空合併,並進行如下:

string username = SomeUserObject.Username ?? "" 
+1

如果SomeUserObject爲空,則仍會失敗。 – micahtan 2010-04-11 05:57:40

+0

SomeUserObject可能爲空。他應該使用條件運算符,並檢查他的空對象。 – 2010-04-11 05:58:05

+0

你們是對的 - 我誤解了這個問題,對不起! – 2010-04-11 10:54:07

2

你要得到,我認爲,最近的是:

string username = SomeUserObject == null ? null : SomeUserObject.Username; 
1

這可能是接近你會得到:

string username = (SomeUserObject != null) ? SomeUserObject.Username : null; 
1

可以使用? :正如其他人所建議的,但您可能需要考慮創建特殊靜態用戶的空對象模式,並在所有位置使用該對象而不是空值。

然後就很容易經常做.Username

其他好處:你得到/可以產生不同的例外情況(空),你沒有分配變量和(沒有登錄),該用戶不允許做某事。

你NotloggedIn用戶可以從用戶,說NotLoggedIn重寫方法和拋出的東西時,不登錄,像付款,發送電子郵件,你不能做的例外......

作爲一個派生類從用戶派生類中你得到一些相當不錯的語法糖,你可以像if (someuser is NotLoggedIn) ...

2

的東西在C#6.0,你現在可以做

string username = SomeUserObject?.Username; 

用戶名會被設置爲空,如果SomeUSerObject爲null。 如果你想讓它變得值「」,你可以做

string username = SomeUserObject?.Username ?? ""; 
相關問題