2013-02-16 34 views
1

這個語法是什麼意思?我目前正在編寫c#4.0,當我來到這段代碼。這個代碼用「?」代表什麼?和「??」意思?

_data = (SerializationHelper.Deserialize(Request.Form[_dataKey]) 
      ? TempData[_dataKey] ?? new ProfileData()) as ProfileData; 

如果我要寫它我IF語句會怎麼樣呢?

編譯器給我一個錯誤,不寫一個:以及需要更多的東西?

+0

@pst我做到了!但是,正如你看到的代碼是錯誤的,所以我認爲有一些特別的事情..但你是對的,我應該寫的..! – 8bitcat 2013-02-17 00:02:32

回答

2

看起來像你錯過了?那裏。我懷疑它應該閱讀:

_data = (SerializationHelper.Deserialize(Request.Form[_dataKey]) 
      ?? TempData[_dataKey] 
      ?? new ProfileData() 
     ) as ProfileData; 

在C#中的操作A ?? B如果你喜歡直接相當於(A == null ? B : A),或if (A == null) return B; return A;

所以你上面的語句等價於:

object tmp = SerializationHelper.Deserialize(Request.Form[_dataKey]); 
if (tmp == null) 
{ 
    tmp = TempData[_dataKey]; 
    if (tmp == null) 
     _tmp = new ProfileData(); 
} 
_data = tmp as ProfileData; 
+0

謝謝偉大的解釋! – 8bitcat 2013-02-16 23:46:14

4

??意味着如果它爲空,則使用其他值。例如

var name = somevalue ?? "Default Name"; 

如果somevalue爲空,將分配值「默認名稱」

而且單?是一個三元運算符,基本上你使用這樣的:

var example = (conditional statement here) ? value_if_true : value_if_false; 

你的代碼似乎但是並沒有遵循三元運營商正確的語法時,我看它的意思,因爲科裏說,你可能已經錯過了?關閉一個??。

+0

但第一個問號呢? – 8bitcat 2013-02-16 23:38:07

+0

查看我的編輯,它是一個三元運算符。 – 2013-02-16 23:38:46