2017-02-24 68 views
1

我收到了一些非常奇怪的行爲。一個對象在同一時間顯示爲空且不爲空,並且語句正在跳過。我可能是一個白癡,但如果這是我的錯,我沒有看到它。我正在Windows 7 SP1操作系統上使用Visual Studio 2008進行構建。C#:對象是null和非空

public void ReadTrendData(OpcDriver opcDriver) 
    { 
     if (opcDriver != null) 
     { 
      int a = 1; 
     } 

     if (opcDriver == null) 
     { 
      Exception ex = new Exception("Null OPC driver received by ReadTrendData()"); 
      throw ex; 
     } 

opcDriver對象已成功創建並傳入此方法。當我通過時,執行「int a = 1」語句。然後,在下一個if塊中,執行到達「throw ex」語句而不執行上面創建ex對象的行。所以,ex是null,並且拋出null給我一個訪問衝突異常。

你知道這裏會發生什麼嗎?

OpcDriver類的幾個成員是來自15年前無保證,不受支持的示例庫的類的實例,它使用COM與OPC(OLE for Process Control)程序進行接口。我能想到的唯一的事情就是,在這個圖書館的某個地方,奇怪的事情正在發生,但我無法想象這是如何成爲可能的。

謝謝。

+5

「OpcDriver」在哪裏?是否重載任何操作符? –

+0

我認爲你嘗試了乾淨的,重新啓動VS,乾淨的生成例程?另外,我會設置一個斷點並查看觀察窗口認爲「opcDriver」是什麼。 –

+1

你有沒有正確的.pdb和源代碼? – 2017-02-24 20:18:19

回答

0

你應該試試更新的visual studio版本。 2008年和2012年版本中我遇到了幾乎相同的問題。這是一個視覺工作室編譯時錯誤。你應該檢查你的構建選項,如果你選擇「釋放」模式,你應該檢查並調試,然後重試。

0

總結一下,它可能是問題的根源是錯誤的運算符重載(==和/或!=)。測試 if (Object.ReferenceEquals(opcDriver, null)) 按預期工作。