La meilleure façon d'appeler une méthode d'instance dans les arbres d'expression?
-
23-08-2019 - |
Question
Quelle est la meilleure façon d'appeler une méthode d'instance dans une expression d'arbre? Ma solution actuelle est quelque chose comme ceci pour une méthode d'interface "objet GetRowValue (rowIndex)" du iColumn d'interface.
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);
}
Y at-il un moyen plus rapide? Est-il possible de créer l'expression sans avoir à passer le nom de la méthode comme une chaîne (mauvais pour refactoring)?
La solution
Vous pouvez le faire avec une méthode d'assistance:
MethodCallExpression GetCallExpression<T>(Expression<Func<T>> e)
{
return e.Body as MethodCallExpression;
}
/* ... */
var getRowValExpr = GetCallExpression(x => x.GetRowValue(0));
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow