MethodInfo
对于 ExpandoObject 上的动态定义方法,您不会得到任何信息。
动态定义的方法与动态定义的属性相同,只是碰巧属于委托类型。
但是,此委托类型包含一个名为Method
type的属性MethodInfo
,您可以使用它:
object ExecuteFunction(IDictionary<string, object> obj, string name,
params object[] parameters)
{
object property;
if(!obj.TryGetValue(name, out property))
return null;
var del = property as Delegate;
if(del == null)
return null;
var methodInfo = del.Method;
// do with methodInfo what you need to do to invoke it.
// This should be in its own method so you can call it from both versions of your
// ExecuteFunction method.
}
请注意,第一个参数的类型是IDictionary<string, object>
。ExpandoObject
实现了这个接口,我们不需要其他的特性ExpandoObject
,所以参数只是我们需要功能的实现接口的类型。