2011-04-22 22 views
2

我有一個非常奇怪的問題。我正在嘗試轉換一個對象,即使在調試模式下它顯示兩個對象是相同的,但它無法投射。下面是代碼Casting:調試模式下的相同類型,但無法投射

if (messageResponse is T) 
      { 
       response = (T)messageResponse; 
      } 

在調試模式下我將鼠標懸停是,它的計算結果爲真實的,但它會跳過if塊,去到別的,現在在這裏顯示。此外,當我強制執行到如果塊I得到這個錯誤信息

[A] AutoAnything.BusinessServer.Messages.GetConfigurationSettingMessageResponse 1[AutoAnything.BusinessServer.DataObjects.Settings.ApplicationManager.ApplicationSettings] cannot be cast to [B]AutoAnything.BusinessServer.Messages.GetConfigurationSettingMessageResponse 1 [AutoAnything.BusinessServer.DataObjects.Settings.ApplicationManager.ApplicationSettings] 。類型A來源於位置'C:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \'上下文'Default'中的 'AutoAnything.BusinessServer.Messages,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null' Temporary ASP.NET Files \ root \ 2dc64af3 \ f4e18fc8 \ assembly \ dl3 \ 88929564 \ 4b299f15_0bfecb01 \ AutoAnything.BusinessServer.Messages.DLL'。類型B源於位置'C:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \'上下文'Default'中的 'AutoAnything.BusinessServer.Messages,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null' Temporary ASP.NET Files \ root \ 2dc64af3 \ f4e18fc8 \ assembly \ dl3 \ 88929564 \ 4b299f15_0bfecb01 \ AutoAnything.BusinessServer.Messages.DLL'。

正如你所看到的物體[A]和[B]被認爲是相同的。有沒有人見過這個?另外,我正在使用反射來調用上面代碼的包含方法。

回答

0

這裏的問題是,當您在調試器中評估表達式時,它實際上並沒有運行代碼。相反,它實際上正在做更接近於解釋表達式的東西。

通常,解釋會產生與實際代碼評估相同的結果,但有些情況下會失敗。其中一個比較難的領域是類型。調試器很可能僅僅是錯誤地評估了懸停上的表達式。

+0

有無論如何得到這些類型可能是輸出? Trace.WriteLine或其他建議? – Lizzard 2011-04-22 19:43:31

+0

還有什麼關於錯誤信息?這只是一種解釋或是實際的運行代碼? – Lizzard 2011-04-22 19:45:05

+0

我試過Trace.Writeline,它仍然輸出相同的東西,不幸的是 – Lizzard 2011-04-22 19:53:12

相關問題