式ツリー内のインスタンスメソッドを呼び出すための最良の方法?

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

  •  23-08-2019
  •  | 
  •  

質問

式ツリー内のインスタンスメソッドを呼び出すための最良の方法は何ですか?私の現在のソリューションは、インタフェースIColumnのインタフェースメソッド「オブジェクト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);            
        }

より高速な方法はありますか?それは(リファクタリングに悪い)文字列としてメソッド名を渡すことなく、式を作成することは可能ですか?

役に立ちましたか?

解決

あなたはヘルパーメソッドでそれを行うことができます:

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