Die beste Methode zum Aufrufen einer Instanzmethode in Expression Trees?

c# expression-trees linq

Frage

Wie kann eine Instanzmethode innerhalb eines Ausdrucksbaums am besten aufgerufen werden? Meine aktuelle Lösung ist etwa so für eine Interface-Methode "Objekt GetRowValue (rowIndex)" der Schnittstelle 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);            
        }

Gibt es einen schnelleren Weg? Ist es möglich, den Ausdruck zu erstellen, ohne den Methodennamen als String übergeben zu müssen (schlecht für Refactoring)?

Akzeptierte Antwort

Sie können es mit einer Hilfsmethode tun:

MethodCallExpression GetCallExpression<T>(Expression<Func<T>> e)
{
    return e.Body as MethodCallExpression;
}

/* ... */
var getRowValExpr = GetCallExpression(x => x.GetRowValue(0));



Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum