gpt4 book ai didi

c# - 在表达式树中调用实例方法的最佳方式?

转载 作者:太空狗 更新时间:2023-10-30 00:36:57 25 4
gpt4 key购买 nike

在表达式树中调用实例方法的最佳方式是什么?对于接口(interface) IColumn 的接口(interface)方法“object 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));

关于c# - 在表达式树中调用实例方法的最佳方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/394911/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com