首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >反射调用2个方法

反射调用2个方法
EN

Stack Overflow用户
提问于 2012-06-28 21:44:56
回答 2查看 392关注 0票数 0

我正在尝试做一些类似的事情,但需要进行反思:

代码语言:javascript
复制
var ss1= method1(param).method2();

我知道如何调用第一个方法,但不知道如何调用第二个方法。

方法1返回一个对象

方法2是GetAwaiter方法(在我的特殊情况下)

代码语言:javascript
复制
 MethodInfo mi = typeof(type).GetMethod("method1");
        Type tt = typeof(type);
        ParameterInfo[] param = mi.GetParameters();

        object[] param = new object[] { //some code  };
        object mm= mi.Invoke(this, param);
        MethodInfo mi2 = typeof(type).GetMethod("GetAwaiter");
        var ss1= mi2.Invoke(mm,null);

在最后一行,我得到了一个错误:"object不匹配目标类型“

EN

回答 2

Stack Overflow用户

发布于 2012-06-28 21:59:46

你的代码或多或少是正确的,但是这个例外告诉你mm不是你想的那样。method1返回的类型与您在.GetMethod("GetAwaiter")行中指定的类型不同。

更安全的方法是用mm.GetType().GetMethod("GetAwaiter")替换typeof(类型)。我怀疑这实际上会返回null,因为mm.GetType()似乎不是您所期望的,但是如果看不到更多的代码(特别是“type”是什么以及"method1“和"GetAwaiter”方法实际上是在哪里声明的),就很难给您更多的指导。

票数 1
EN

Stack Overflow用户

发布于 2012-06-28 22:18:03

这一行有一个错误

代码语言:javascript
复制
MethodInfo mi2 = typeof(type).GetMethod("GetAwaiter");

mm对象有不同的类型,所以你会得到一个异常。将行更改为

代码语言:javascript
复制
MethodInfo mi2 = mm.GetType().GetMethod("GetAwaiter");

就像蒂姆建议的那样。

最好使用Type.InvokeMember方法,因为它更短,并且有助于避免像这样的错误。例如:

代码语言:javascript
复制
object mResult = this.GetType ().InvokeMember ("method1", 
    BindingFlags.InvokeMethod | BindingFlags.Instance, null, this, 
    new object[] { /* parameters here */ });
object awaiter = mResult.GetType ().InvokeMember ("GetAwaiter",
    BindingFlags.InvokeMethod | BindingFlags.Instance, null, mResult, null);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11246054

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档