我想使用struct
方法调用返回MethodInfo.Invoke
的方法。但是,此metod的返回变量类型为object
,无法转换为struct
。
(发现,以及从struct
切换到class
的建议,在此处:http://msdn.microsoft.com/en-us/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
}
}
谢谢大家!
答案 0 :(得分:3)
演员表失败是因为它们是不同的类型,更具体地说,一个是MyInvokedClass.MyStruct
,另一个是MyInvokingClass.MyStruct
。
当InvokedMethod
被调用时,MyStruct
引用嵌套在MyInvokedClass
内的类型,但执行强制转换时(MyStruct)
指的是嵌套在MyInvokingClass
内的类型{1}}。
您可以使用MyInvokedClass.MyStruct
内的MyInvokingClass
来引用正确的结构,但更好的方法就是拥有一个MyStruct
类型。
您可能会发现阅读有关声明空间的更多信息非常有用:
答案 1 :(得分:3)
您有两种不同的类型:MyInvokedClass.MyStruct
和MyInvokingClass.MyStruct
。
您调用的方法可能会返回MyInvokedClass.MyStruct
,并且您尝试将其强制转换为MyInvokingClass.MyStruct
。您正在点击InvalidCastException
,因为这两种类型完全不同。
答案 2 :(得分:2)
要解决您的问题,请将结构移出类:
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);
}
}