我有類似下面的代碼:可能出現的意外參考對比擔任意
this.Session[key] = "foo";
if ((this.Session[key] ?? string.Empty) == "foo")
{
//do stuff
}
這當然,創建一個「可能出現的意外參考對比擔任意」的局面。對此的解決方案在此處有詳細記錄,並且我已經知道該修復會在我看到代碼後立即將會話變量強制轉換爲string
。
但是,代碼是歲,從未改變,因爲它最初寫的。直到這個星期在我們的測試環境中,if
語句評估爲真,執行//do stuff
部分。這個錯誤的代碼仍然在我們的生產環境中按照預期工作。
這怎麼可能?這段代碼沒有任何理由應該像預期的那樣工作;但它確實並且仍然在生產中。那麼爲了使這段代碼不應該工作但是已經做了什麼改變,突然停止工作(或者更確切地說,應該像它應該有的那樣)?
是否在測試環境中超出proc會話? –
在這個問題中,我很困惑兩件事。首先,這個問題包含一個邏輯上的謬誤:代碼的行爲總是一樣的。它比較兩個參考的平等。如果它生成真的,那是因爲引用是相等的。如果它始終如一地產生,那麼引用是一致的。我不明白你在這裏感到困惑。其次,我不能在我的生活中弄清楚無效合併操作符在這裏意味着什麼。代碼的意思是「如果值爲空,比較空爲空」,但爲什麼?如果爲null,則該值已經不是「foo」! –
'Session [key]'究竟是如何設置的?它與什麼相比?您在測試和生產環境中使用了什麼版本的.NET框架?這兩種環境之間必定存在一些差異,導致字符串實習的工作方式不同。您發佈的代碼使用2個字符串文字 - afaik這些將始終被攔截,除非在彙編級別關閉了interning。 –