【发布时间】:2014-07-08 17:53:52
【问题描述】:
我想用 C# 中的某种 Lambda 表达式返回一个方法(或方法信息)。
public class MyClass {
public object ReturnSomething(string arg, int numericArg)
{/*...*/}
}
然后,稍后,我想像这样使用 Lambda 引用此方法..
public static void Run<T>(T sourceObject, Expression<Func<T, object>> memberExpression, IEnumerable<object> parameters)
{
var methodInfo = ((MemberExpression)memberExpression.Body).Member as MethodInfo;
if (methodInfo == null)
throw new ArgumentException("memberExpression must yield a method");
/*...*/
}
我尝试过将它与类似的东西一起使用:
var myClassObject = new MyClass();
Run(myClassObject, o => o.ReturnSomething, new object["string arg", 1]);
但我的表达式中不断出现此编译器错误:
无法将方法组“ReturnSomething”转换为非委托类型 '目的'。您是否打算调用该方法?
这在 c# 中是否可行,还是我应该放弃并传递带有方法名称的字符串并使用反射而不是使用 MemberExpression 进行查找?
【问题讨论】:
-
不能说我理解它的重点,你为什么需要这样做?动态执行的重点是允许非编码源驱动执行,这种方法需要您提供方法和参数。我错过了什么?
标签: c# reflection lambda func