.NET反射,期待System.String获取System.Object

时间:2011-11-22 22:44:20

标签: .net reflection

我希望有人能指出我正确的方向。我有一个方法(A),它返回通过反射(B)调用的另一个方法的结果。 A返回一种Object类型,但是用(B)调用的方法返回一个字符串。

当我在本地运行我的应用程序时,执行:

    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#编写的。

2 个答案:

答案 0 :(得分:1)

不是很明显,但它必须是相同的代码。如果它是相同的代码,它很可能会有相同的结果。

您是否正在使用VB.NET库的源代码?如果你这样做,因为你有源它调用方法的源,所以它可以自动推断出类型,而使用'production'版本,它不能推断出类型,因为它是从一个程序集或其他东西调用。 / p>

有一个简单的解决方法:

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

答案 1 :(得分:0)

感谢您的帮助。我已经解决了这个问题。事实证明,返回生产环境的System.Object是准确的。 A调用的方法使用ByRef Object变量,变量设置为字符串并返回。

当该变量在生产中设置时,异常被抛出并被吞噬。当方法完成执行时,ByRef从未被赋予字符串值,因此仍然是System.Object。

谢谢