這個語法是什麼意思?我目前正在編寫c#4.0,當我來到這段代碼。這個代碼用「?」代表什麼?和「??」意思?
_data = (SerializationHelper.Deserialize(Request.Form[_dataKey])
? TempData[_dataKey] ?? new ProfileData()) as ProfileData;
如果我要寫它我IF語句會怎麼樣呢?
編譯器給我一個錯誤,不寫一個:以及需要更多的東西?
這個語法是什麼意思?我目前正在編寫c#4.0,當我來到這段代碼。這個代碼用「?」代表什麼?和「??」意思?
_data = (SerializationHelper.Deserialize(Request.Form[_dataKey])
? TempData[_dataKey] ?? new ProfileData()) as ProfileData;
如果我要寫它我IF語句會怎麼樣呢?
編譯器給我一個錯誤,不寫一個:以及需要更多的東西?
看起來像你錯過了?
那裏。我懷疑它應該閱讀:
_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;
謝謝偉大的解釋! – 8bitcat 2013-02-16 23:46:14
??意味着如果它爲空,則使用其他值。例如
var name = somevalue ?? "Default Name";
如果somevalue
爲空,將分配值「默認名稱」
而且單?是一個三元運算符,基本上你使用這樣的:
var example = (conditional statement here) ? value_if_true : value_if_false;
你的代碼似乎但是並沒有遵循三元運營商正確的語法時,我看它的意思,因爲科裏說,你可能已經錯過了?關閉一個??。
但第一個問號呢? – 8bitcat 2013-02-16 23:38:07
查看我的編輯,它是一個三元運算符。 – 2013-02-16 23:38:46
@pst我做到了!但是,正如你看到的代碼是錯誤的,所以我認爲有一些特別的事情..但你是對的,我應該寫的..! – 8bitcat 2013-02-17 00:02:32