我正在尝试做一些类似的事情,但需要进行反思:
var ss1= method1(param).method2();我知道如何调用第一个方法,但不知道如何调用第二个方法。
方法1返回一个对象
方法2是GetAwaiter方法(在我的特殊情况下)
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不匹配目标类型“
发布于 2012-06-28 21:59:46
你的代码或多或少是正确的,但是这个例外告诉你mm不是你想的那样。method1返回的类型与您在.GetMethod("GetAwaiter")行中指定的类型不同。
更安全的方法是用mm.GetType().GetMethod("GetAwaiter")替换typeof(类型)。我怀疑这实际上会返回null,因为mm.GetType()似乎不是您所期望的,但是如果看不到更多的代码(特别是“type”是什么以及"method1“和"GetAwaiter”方法实际上是在哪里声明的),就很难给您更多的指导。
发布于 2012-06-28 22:18:03
这一行有一个错误
MethodInfo mi2 = typeof(type).GetMethod("GetAwaiter");mm对象有不同的类型,所以你会得到一个异常。将行更改为
MethodInfo mi2 = mm.GetType().GetMethod("GetAwaiter");就像蒂姆建议的那样。
最好使用Type.InvokeMember方法,因为它更短,并且有助于避免像这样的错误。例如:
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);https://stackoverflow.com/questions/11246054
复制相似问题