在表达式树中调用实例方法的最佳方法是什么?对于接口IColumn的接口方法“object GetRowValue(rowIndex)”,我当前的解决方案是这样的。
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);
}
有更快的方法吗?是否可以创建Expression而无需将方法名称作为字符串传递(对于重构不好)?
答案 0 :(得分:8)
您可以使用辅助方法执行此操作:
MethodCallExpression GetCallExpression<T>(Expression<Func<T>> e)
{
return e.Body as MethodCallExpression;
}
/* ... */
var getRowValExpr = GetCallExpression(x => x.GetRowValue(0));