我有很多类,继承自 ITest,例如:
class {dynamic class}: ITest<UlId>
{
public void SetValue(IDbDataParameter parameter, UlId value)
{
parameter.Value = value.ToByteArray();
}
}
我想知道如何将“SetValue”转换为 lambda 表达式,之后我可以调用
Action<IDbDataParameter, object>
我的代码出错了,
var xx = itf.GenericTypeArguments[0];
var arg = Expression.Parameter(t);
var method = t.GetMethod("SetValue");
var value = Expression.Parameter(typeof(object));
var c = Expression.Call(Expression.Convert(arg, method.DeclaringType),//类
method,
Expression.Parameter(typeof(IDbDataParameter)),
Expression.Convert(value, method.GetParameters()[1].ParameterType));
columnInfo.SetDbDataParameterValue = Expression.Lambda<Action<IDbDataParameter, object>>(
c,
arg,
value).Compile();
一种方法是在Action<>或Func<>中转换你的方法,这里是一个Action,因为没有返回值;
Action<IDbDataParameter, UlId> SetValue = (parameter, value) => parameter.Value = value.ToByteArray();
你像这样使用它:
SetValue(...,...);
我不确定这对你的情况有用....