如何解决如何将MethodInfo.Invoke方法返回的值类型转换为其正确的类型?
| 我想使用MethodInfo.Invoke
方法调用返回struct
的方法。但是,此方法的返回变量类型为object
,不能转换为struct
。
(发现了这一点,以及从“ 0”切换到“ 5”的建议,在这里:http://msdn.microsoft.com/zh-cn/library/b7tch9h0(VS.90).aspx)
那么,如何将调用方法的(值)结果转换为正确的类型呢?
(我也尝试过简单的类型转换,但是它引发了InvalidCastException)
这是我的代码的一些块:
public class MyInvokedClass
{
public struct MyStruct
{ ... };
public MyStruct InvokedMethod()
{
MyStruct structure;
...
return structure;
}
}
public class MyInvokingClass
{
// Same structure here
public struct MyStruct
{ ... };
static void Main(string[] args)
{
...
MethodInfo methodInfo = classType.GetMethod(methodName);
MyStruct result = (MyStruct)methodInfo.Invoke(classInstance,null);
// the line above throws an InvalidCastException
}
}
谢谢你们!
解决方法
强制转换失败,因为它们是不同的类型,更具体地说,一个是
MyInvokedClass.MyStruct
,另一个是MyInvokingClass.MyStruct
。
当InvokedMethod
被调用时,MyStruct
是指嵌套在MyInvokedClass
内部的类型,但是当进行强制转换时,(MyStruct)
是指嵌套在MyInvokingClass
内部的类型。
您可以在ѭ13内使用ѭ7来引用正确的结构,但更好的是仅使用一种MyStruct
类型。
您可能会发现阅读更多有关声明空间的信息很有用:
C#基本概念—声明
, 您有两种不同的类型:MyInvokedClass.MyStruct
和MyInvokingClass.MyStruct
。
您正在调用的方法可能会返回MyInvokedClass.MyStruct
,而您正尝试将其转换为MyInvokingClass.MyStruct
。您正在打InvalidCastException
,因为那是两种完全不同的类型。
, 要解决您的问题,请将结构移出类:
public struct MyStruct
{ ... };
public class MyInvokedClass
{
public MyStruct InvokedMethod()
{
MyStruct structure;
...
return structure;
}
}
public class MyInvokingClass
{
static void Main(string[] args)
{
...
MethodInfo methodInfo = classType.GetMethod(methodName);
MyStruct result = (MyStruct)methodInfo.Invoke(classInstance,null);
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。