Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.NET反射,应为System.String,而应为System.Object_.net_Reflection - Fatal编程技术网

.NET反射,应为System.String,而应为System.Object

.NET反射,应为System.String,而应为System.Object,.net,reflection,.net,Reflection,我希望有人能给我指出正确的方向。我有一个方法(a),它返回通过反射(B)调用的另一个方法的结果。A返回一种类型的对象,但是用(B)调用的方法返回一个字符串 当我在本地运行应用程序并执行以下操作时: object x = A(); string y = x.GetType().ToString(); “y”的值是预期的System.String。当我在生产环境中运行完全相同的代码时(是的,它是完全相同的代码/库/可执行文件/等等。我没有头发可以证明它:),“y”是System

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

当我在本地运行应用程序并执行以下操作时:

    object x = A(); 
    string y = x.GetType().ToString(); 
“y”的值是预期的System.String。当我在生产环境中运行完全相同的代码时(是的,它是完全相同的代码/库/可执行文件/等等。我没有头发可以证明它:),“y”是System.Object。这最终会导致下游出现错误


谁能告诉我是什么导致了这种差异?在本地,我正在运行Windows 7 Professional的物理副本。在生产中,我运行的是虚拟化的Windows Server 2008标准。此应用程序是用.NET3.5编写的。方法A和B在VB.NET库中编写。调用应用程序是用C#编写的。

不明显,但它不能是相同的代码。如果是相同的代码,则很可能会得到相同的结果

您正在使用VB.NET库的源代码吗?如果您这样做,因为您有源,它正在调用方法的源,所以它可以自动推断类型,而对于“生产”版本,它无法推断类型,因为它是从程序集或其他地方调用的

有一个简单的解决方法:

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

谢谢你的帮助。我已经解决了这个问题。事实证明,返回生产环境的系统对象是准确的。由调用的方法使用ByRef对象变量,该变量设置为字符串并返回

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


谢谢

对于相同的可执行文件,您的意思是没有不同的调试/发布版本?嗨,Shlomo,谢谢您的回复。我已经尝试了您建议的强制转换解决方案,但最终得到的只是一个InvalidCastException(无法将类型为“System.object”的对象强制转换为类型为“System.String”。)