C# 如何构建表达式 lambda

问题描述 投票:0回答:1

我有很多类,继承自 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();
c# lambda expression
1个回答
0
投票

一种方法是在Action<>或Func<>中转换你的方法,这里是一个Action,因为没有返回值;

Action<IDbDataParameter, UlId> SetValue = (parameter, value) => parameter.Value = value.ToByteArray();

你像这样使用它:

    SetValue(...,...);

我不确定这对你的情况有用....

© www.soinside.com 2019 - 2024. All rights reserved.