2011-11-22 51 views
0

我希望有人能指出我正確的方向。我有一個方法(A)返回通過反射(B)調用的另一個方法的結果。 A返回一個Object類型,但是用(B)調用的方法返回一個字符串。.NET反射,期待System.String獲取System.Object而不是

當我在本地運行我的應用程序,然後執行:如預期

object x = A(); 
    string y = x.GetType().ToString(); 

'Y' 的值System.String。當我在生產中運行完全相同的代碼(是的,它是完全相同的代碼/庫/可執行文件等等,我沒有頭髮可以證明它:)),'y'是System.Object。這最終導致下游出錯。

任何人都可以給我一個什麼是造成這種差異的想法?我在本地運行Windows 7 Professional的物理副本。在生產中,我正在運行虛擬化的Windows Server 2008 Standard。這個應用程序是用.NET 3.5編寫的。方法A和B寫成一個VB.NET庫。調用應用程序是用C#編寫的。

+1

對於相同的可執行文件,你的意思是沒有不同的調試/發佈構建? – Stormenet

+0

這是正確的。 – user961714

回答

0

感謝您的幫助。我已經解決了這個問題。事實證明,返回生產環境的System.Object是準確的。由A調用的方法使用ByRef Object變量,該變量被設置爲一個字符串並被返回。

當該變量在生產中被設置時,異常被拋出並被吞下。當方法完成執行時,ByRef從來沒有被分配過字符串值,因此仍然是一個System.Object。

謝謝

1

不是很明顯,但它不能是相同的代碼。如果它是相同的代碼,它很可能會有相同的結果。

您是否正在使用VB.NET庫的源代碼?如果你這樣做,因爲你有源代碼調用方法的源頭,所以它可以自動推斷出類型,而對於'生產'版本,它不能推斷類型,因爲它是從程序集中調用的。

有一個簡單的辦法:

object x = A(); 
object xCasted = x as string; 
if(x == null) ; //you have issues 
+0

嗨Shlomo,謝謝你的迴應。我已經按照您的建議嘗試了澆注解決方案,但是我最終得到的結果是一個InvalidCastException(無法強制類型爲'System.Object'的對象來鍵入'System.String'。) – user961714

相關問題