2016-02-25 33 views
3

enter image description hereC#表現異常的檢查條件

規則值: enter image description here

任何一個可以幫助我瞭解控制是如何移動到「如果」塊即使規則變量不爲空?我正在使用EF6

謝謝!

+5

你可以懸停在規則值本身嗎? – TimS

+1

如果你把'rule'放到手錶窗口中,'rule'包含什麼值? – ibiza

+0

我看到這個類型是來自EF的動態代理,可能是bug的一部分(懶加載或其他東西) – ibiza

回答

4

這是一個調試器錯誤。在C#語言規範下,截圖中明顯的行爲是不可能的。

這可能是一個CLR錯誤,但這是不太可能的。 if沒有錯誤。

創建一個小的,可執行的repro並在MS Connect上報告它。

您可以在if語句正文中添加斷言rule == null,它不會觸發。這證明該值實際上是預期的null

作爲一個有趣但不太可能的替代理論,可能會有一個超載和破壞的運算符等於。

以我的經驗調試器的錯誤並不罕見。多年來我找到了一些。沒有太嚴重。調試器是一個非常複雜的機器,它以非常有創意的方式檢查正在運行的程序。很難得到100%的權利。

2

唯一的解釋(VS中不太可能出現的錯誤)是源版本與編譯版本(編譯版本=調試符號)不匹配。這可以在Visual Studio中使用此設置。

調試(菜單) - >選項(菜單) - >調試(標籤) - >常規 - > 「要求源文件與原始版本完全匹配」

如果你之前有if(rule != null)你所做的只是在代碼中將其更改爲if(rule == null),但調試符號沒有更新,這可以解釋屏幕上的行爲。

+0

這也是合理的。 – usr