У меня есть это лямбда-выражение Expression<Func<bool>> commandToExecute
Затем я передаю экземпляр класса там с помощью метода:
_commandExecuter.ProcessCommand (() => aClass.Method())
Как получить экземпляр aClass
в методе ProcessCommand
?
Я хочу выполнить некоторые addiontal методы этого класса или получить некоторые значения свойств.
Возможно ли это?
EDIT: Теперь я написал простой статический вспомогательный метод для получения экземпляра:
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
всегда имеет значение null.
Любые идеи?
РЕДАКТИРОВАТЬ 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, в которой находится выделенный экземпляр моего провайдера.
Как получить реальный объект (aClass
) выражения лямбда?