咨询区 我的类中有一组私有方法,我现在想根据灵活的输入值来动态调用其中的私有方法,代码类似是这个样子。MethodInfodynMethodthis。GetType()。GetMethod(DrawitemType);dynMethod。Invoke(this,newobject〔〕{methodParams}); 代码跑起来后,我发现dynMethod并没有返回结果,请问我该如何配置才能正确的返回?回答区 如果你真的想解决这个问题,个人建议你写个扩展方法,比如下面这样。staticclassAccessExtensions{publicstaticobjectcall(thisobjecto,stringmethodName,paramsobject〔〕args){varmio。GetType()。GetMethod(methodName,System。Reflection。BindingFlags。NonPublicSystem。Reflection。BindingFlags。Instance);if(mi!null){returnmi。Invoke(o,args);}}} 然后可以这样使用classCounter{publicintcount{}voidincr(intvalue){}}〔Test〕publicvoidmakingquestionablelifechoices(){CountercnewCounter();c。call(incr,2);incrisprivate!c。call(incr,3);Assert。AreEqual(5,c。count);} 微软最近修改了反射API,在新的反射模式和平台下,大概是这么写的。obj。GetType()。GetTypeInfo()。GetDeclaredMethod(MethodName)。Invoke(obj,yourArgsHere); 实践中最好还是封装成一个泛型方法,比如下面这样。publicstaticobjectInvokeMethodT(thisTobj,stringmethodName,paramsobject〔〕args){vartypetypeof(T);varmethodtype。GetTypeInfo()。GetDeclaredMethod(methodName);returnmethod。Invoke(obj,args);} 注意:如果你需要调用的方法是在obj的基类中,那这里的泛型参数T要显式定义为基类。如果你需要调用的方法是一个异步方法,你可以使用await(Task)obj。InvokeMethod()。点评区 确实微软已经优化了各种反射Api,使用起来虽然较慢,但相比以前要好很多了。 文章来源于NET技术问答,作者Stackoverflow