2011-01-05 60 views
3

在此.NET代碼:?? 2個字符串的操作符?

return Redirect("~/Home" ?? "JaneDoe"); 

如果我在看文檔吧, 「??」 運營商似乎在SQL操作類似於ISNULL:

IsNull("~/Home", "JaneDoe") 

"~Home""JaneDoe"只是字符串,對嗎? return Redirect代碼中沒有條件,其中「JaneDoe」將被傳遞到「重定向」中,是嗎?我不確定這段代碼要做什麼,我只能假設它是一個稍後會發生的佔位符。

此代碼來自開發中的.NET-MVC項目,是LoginController的.cs文件的一部分。

+7

您應該提交這TheDailyWTF.com – jfar 2011-01-05 16:19:26

+0

我想你的意思IFNULL,不ISNULL。 – siride 2011-01-05 16:20:47

+1

我在想這個IsNull - http://msdn.microsoft.com/en-en/library/ms184325.aspx – artlung 2011-01-05 16:24:27

回答

7

是的,這只是錯誤的代碼。這將總是相當於

return Redirect("~/Home"); 

我微微一愣,編譯器是不是足夠聰明,給一個警告,說實話。如果它能夠說明在空合併運算符的LHS上使用了一個常量非空表達式,那將會很好。

+0

謝謝。我看起來很奇怪。我還在學習。 – artlung 2011-01-05 16:21:17

+2

@artlung:看起來像編寫代碼的人仍然在學習;) – 2011-01-05 16:23:13

+0

@Jon Skeet:: - |是的,在這一點上,我沒有看到示例.NET-MVC項目(例如:http://www.asp.net/mvc/tutorials/mvc-music-store-part-1)和這個之間的區別。 – artlung 2011-01-05 16:29:08

2

是的,你正確地閱讀它。這將始終返回「〜/ Home」,據推測,它計劃在某個時刻將其更改爲變量。

+0

謝謝,是的,它似乎是一個佔位符。 – artlung 2011-01-05 16:21:39

1

正確,表達式永遠不會返回「JaneDoe」。

1

這將始終使用"~/Home"字符串。空合併運算符(??)選擇左側,如果它是非空的,或右側,如果它爲空。

3

??運算符被稱爲空合併運算符,用於爲可爲空的值類型以及引用類型定義默認值。如果它不是null,則返回左邊的操作數;否則它返回右操作數。

在你的情況下,它不會返回JaneDoe