式ツリー内のインスタンスメソッドを呼び出すための最良の方法?
-
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));
所属していません StackOverflow