C# 通过反射调用 Func 委托
程序员文章站
2023-10-28 20:05:34
C 通过反射调用 Func 委托 Intro 最近我的 NPOI 扩展库增加了,自定义输出的功能,可以自定义一个 Func 委托来设置要导出的内容,详细介绍请查看 ,通过 Func 可以很方便设置,但是要调用的时候就有点麻烦了 反射调用 获取委托的方法: 获取要执行方法时的target: 委托的方法 ......
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
分享一下,希望对你有帮助~