C# 通过反射调用 Func 委托
2019-08-02 18:08
951 查看
C# 通过反射调用 Func 委托
Intro
最近我的 NPOI 扩展库增加了,自定义输出的功能,可以自定义一个 Func 委托来设置要导出的内容,详细介绍请查看 https://www.cnblogs.com/weihanli/p/custom-column-output-support-for-weihanli-npoi.html,通过 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
分享一下,希望对你有帮助~
相关文章推荐
- 深入理解 c# 第三章 通过反射来调用和获取泛型方法
- 通过IL分析C#中的委托、事件、Func、Action、Predicate之间的区别与联系
- C#如何反射出委托的签名,如何使用反射调用委托
- 用C#通过反射实现动态调用WebService 告别Web引用
- C#通过反射调用泛型方法
- C#通过委托和异步调用实现窗体间的通讯
- 用C#通过反射实现动态调用WebService 告别Web引用(转载)
- 2.C#中通过委托Func消除重复代码
- C#通过反射调用泛型参数方法介绍
- C#反射之Assembly---CLR/c++可以通过反射调用c#类库
- [No000085]C#反射Demo,通过类名(String)创建类实例,通过方法名(String)调用方法
- C# 直接调用vs 委托vs动态调用vs动态类型vs反射,最佳性能测试
- C#通过反射来动态创建类对象并调用相关泛型函数(Excel数据自动导入到SQL Server数据库)
- C#,动态加载DLL,通过反射,调用参数,方法,窗体
- 通过IL分析C#中的委托、事件、Func、Action、Predicate之间的区别与联系
- C#通过委托调用Button单击事件的方法
- C#源代码—声明委托,通过委托对象调用所指向的方法
- 通过IL分析C#中的委托、事件、Func、Action、Predicate之间的区别与联系
- C#反射调用其它DLL的委托事件 传值
- C# 委托的三种调用示例(同步调用 异步调用 异步回调) 之 FUNC 版