2

我想调用一个返回 a的方法struct,使用该MethodInfo.Invoke方法。但是,此方法的返回变量的类型是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
    }
}

谢谢你们!

4

3 回答 3

3

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

InvokedMethod被调用时,MyStruct指的是嵌套在.MyInvokedClass(MyStruct)MyInvokingClass

您可以使用MyInvokedClass.MyStructinsideMyInvokingClass来引用正确的结构,但更好的是只有一种MyStruct类型。

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

C# 基本概念——声明

于 2011-05-31T14:59:09.263 回答
3

您有两种不同的类型:MyInvokedClass.MyStructMyInvokingClass.MyStruct.

您正在调用的方法可能会返回MyInvokedClass.MyStruct,并且您正试图将其转换为MyInvokingClass.MyStruct. 你打的是InvalidCastException因为这是两种完全不同的类型。

于 2011-05-31T14:59:48.187 回答
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); 
    }
}
于 2011-05-31T15:01:55.203 回答