La meilleure façon d'appeler une méthode d'instance dans les arbres d'expression?

StackOverflow https://stackoverflow.com/questions/394911

  •  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)?

Était-ce utile?

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
scroll top