如何将MethodInfo.Invoke方法返回的值类型转换为正确的类型?

时间:2011-05-31 14:56:28

标签: c# .net reflection methodinfo

我想使用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
    }
}

谢谢大家!

3 个答案:

答案 0 :(得分:3)

演员表失败是因为它们是不同的类型,更具体地说,一个是MyInvokedClass.MyStruct,另一个是MyInvokingClass.MyStruct

InvokedMethod被调用时,MyStruct引用嵌套在MyInvokedClass内的类型,但执行强制转换时(MyStruct)指的是嵌套在MyInvokingClass内的类型{1}}。

您可以使用MyInvokedClass.MyStruct内的MyInvokingClass来引用正确的结构,但更好的方法就是拥有一个MyStruct类型。

您可能会发现阅读有关声明空间的更多信息非常有用:

C# Basic Concepts—Declarations

答案 1 :(得分:3)

您有两种不同的类型:MyInvokedClass.MyStructMyInvokingClass.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); 
    }
}
相关问题