Лучший способ вызвать метод экземпляра в деревьях выражений?
-
23-08-2019 - |
Вопрос
Как лучше всего вызвать метод экземпляра в дереве выражений?Мое текущее решение выглядит примерно так для метода интерфейса «объект GetRowValue(rowIndex)» интерфейса IColumn.
public static Expression CreateGetRowValueExpression(
IColumn column,
ParameterExpression rowIndex)
{
MethodInfo methodInfo = column.GetType().GetMethod(
"GetRowValue",
BindingFlags.Instance | BindingFlags.Public,
null,
CallingConventions.Any,
new[] { typeof(int) },
null);
var instance = Expression.Constant(column);
return Expression.Call(instance, methodInfo, rowIndex);
}
Есть ли более быстрый способ?Можно ли создать выражение без необходимости передавать имя метода в виде строки (плохо для рефакторинга)?
Решение
Вы можете сделать это с помощью вспомогательного метода:
MethodCallExpression GetCallExpression<T>(Expression<Func<T>> e)
{
return e.Body as MethodCallExpression;
}
/* ... */
var getRowValExpr = GetCallExpression(x => x.GetRowValue(0));
Не связан с StackOverflow