Лучший способ вызвать метод экземпляра в деревьях выражений?

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

  •  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));
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top