当前位置: 移动技术网 > IT编程>开发语言>c# > C# 通过反射调用 Func 委托

C# 通过反射调用 Func 委托

2019年08月02日  | 移动技术网IT编程  | 我要评论

c# 通过反射调用 func 委托

intro

最近我的 npoi 扩展库增加了,自定义输出的功能,可以自定义一个 func 委托来设置要导出的内容,详细介绍请查看 ,通过 func 可以很方便设置,但是要调用的时候就有点麻烦了

反射调用

var propertyvalue = property.getvaluegetter<tentity>().invoke(entity);
 var propertytype = typeof(propertysetting<,>).makegenerictype(_entitytype, p.propertytype);
var formatterfunc = propertytype.getproperty("columnformatterfunc")?.getvaluegetter().invoke(setting);

if (null != formatterfunc)
{
    var functype = typeof(func<,,>).makegenerictype(_entitytype, key.propertytype, typeof(object));

    var method = functype.getproperty("method")?.getvaluegetter().invoke(formatterfunc) as methodinfo;
    var target = functype.getproperty("target")?.getvaluegetter().invoke(formatterfunc);

    if (null != method && target != null)
    {
        // apply custom formatterfunc
        // 这里调用方法的时候要注意,method的 invoke 对象是 target
        propertyvalue = method.invoke(target, new[] { entitylist[i], propertyvalue });
    }
}

获取委托的方法:getproperty("method")
获取要执行方法时的target: getproperty("target")

委托的方法是一个 methodinfo 对象,可以转为 methodinfo 对象,然后调用其 invoke 方法,并传递参数等信息

method.invoke(target, new object[]{ parameters });

memo

分享一下,希望对你有帮助~

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网