【发布时间】:2010-08-31 08:53:55
【问题描述】:
我有这个 lambda 表达式 Expression<Func<bool>> commandToExecute
然后我用一个方法传递一个类的实例:
_commandExecuter.ProcessCommand (() => aClass.Method())
如何在ProcessCommand 方法中获取aClass 的实例?
我想执行这个类的一些附加方法或获取一些属性值。
这可能吗?
编辑: 我现在编写了一个简单的静态辅助方法来获取实例:
private static object GetReferredProviderInstance(Expression body)
{
var methodCallExpression = body as MethodCallExpression;
if (methodCallExpression != null)
{
var constantExpression = methodCallExpression.Object as ConstantExpression;
if (constantExpression != null) return constantExpression.Value;
}
return null;
}
方法调用是这样的……
Expression body = commandToExecute.Body; // this is the method parameter Expression<Func<bool>> commandToExecute
var referredProviderInstance = GetReferredProviderInstance(body);
这里的问题是,对 ConstantExpression 的强制转换会导致 Null。所以constantExpression 始终为空。
有什么想法吗?
编辑 2 我解决了这个问题...
private static object GetReferredProviderInstance(Expression body)
{
var methodCallExpression = body as MethodCallExpression;
if (methodCallExpression != null)
{
var memberExpression = methodCallExpression.Object as MemberExpression;
if (memberExpression != null)
{
var constantExpression = memberExpression.Expression as ConstantExpression;
if (constantExpression != null) return constantExpression.Value;
}
}
return null;
}
但这里又出现了一个新问题。我只获得了我的提供者的引用实例所在的 windows 窗体的实例。
如何获取 lambda 表达式的真实对象 (aClass)?
【问题讨论】: