Newbe.ObjectVisitor C# 类反射工具包

代码狂魔 2020-11-03 09:47:04 ⋅ 1010 阅读

Newbe.ObjectVisitor 帮助开发者可以用最简单的最高效的方式访问一个普通 class 的所有属性。从而实现:验证、映射、收集等等操作。

例如, 在你的代码中有这样一个简单的类。

var order = new OrderInfo();

你想要将这个类所有的属性和值都打印出来,那么你可以采用反射来完成:

for(var pInfo in typeof(OrderInfo).GetProperties())
{
    Console.Writeline($"{pInfo.Name}: {pInfo.GetValue(order)}");
}

如果你使用这个类库,则可以采用以下方式来实现一样的效果:

// call .V what is a static extension method
// you get a visitor object for order
var visitor = order.V();

visitor.ForEach(context=>{
    var name = context.Name;
    var value = context.Value;
    Console.Writeline($"{name}: {value}");
}).Run();

// you can also make it into one line
order.V().ForEach(c=> Console.Writeline($"{c.Name}: {c.Value}")).Run();

// or using quick style
order.FormatToString();

那我为什么要这样做?

  • 因为这样更快!这个类库使用表达式树实现,因此它拥有比直接使用反射快上10倍的性能.
  • 因为这样更可读!通过这个类库你可以使用链式API和命名方法来创建一个委托,这样可以让你的代码实现和硬编码同样的可读效果。
  • 因为这样更具扩展性!如果使用了这个类库,你就拥有了一个简便的方法来访问一个类所有的属性。因此,你就做很多你想做的事情,比如:创建一个验证器来验证你的模型,修改一些可能包含敏感数据的属性从而避免输出到日志中,创建一个类似于AutoMapper的对象映射器但是拥有更好的性能,诸如此类。

全部评论: 0

    我有话说:

    【开源资讯】cppweb 1.0.2 发布,基于 C++ 开发的 Web 服务器

    cppweb是一个基于C++开发的 WEB 服务器,支持C/C++、Python、Java等多语言混合开发WEB应用。 cppweb同时也是一个跨平台的微服务开发框架,通过两个核心组件

    最全Mac工具

      MacTool Mac 开源免费工具汇总, 只罗列开源好用的。更全列表请参考awesome-mac 必备 Homebrew - 体验通过命令行安装 Mac 软件的工具(大部分是

    工具集001

      1.  Google项目管理工具 Tables   2. 终端 taskwarrior --- TODO List Taskwarrior is

    理解有符号数和无符号数

      原文链接 理解有符号数和无符号数 声明网上看到的文章,原文找不到了,原文被转载的不成样子,重复很多,整理花了很长时间,在翻看了维基百科后发现,原文中对于负数原码和补码存在一些问题,修改了一部分,原作者看到后可以联系我。 1、你自...

    MongoHelper 0.2.5 发布,Spring-Data-MongoDB 增强工具包

    工具包简化 CRUD 操作,并且提供了 jpa 的数据库操作。

    工具集002

      文件对比 https://www.diffchecker.com/excel-diff 快速找出类似文件的不同之处。  

    Excelize -Go 开源项目中唯一支持复杂样式 XLSX 文件的

    Go 语言编写的一个用来操作 Office Excel 文档

    Traefik 2.3.2发布,HTTP 反向代理与负载工具

    Traefik简介 Træfɪk 是一个云原生的新型的 HTTP 反向代理、负载均衡软件,能轻易的部署微服务. 它支持多种后端 (Docker, Swarm, Mesos/Marathon

    反向面试

      你可以反问面试官的问题 内容来源:https://github.com/yifeikong/reverse-interview-zh 大部分翻译自:https://github

    2017编程语言“名人榜”揭晓,C语言夺冠

    2017年度编程语言榜单公布啦!C语言登顶,Python紧随其后!

    Google Code:Google guava工具快速使用

    Guava是对Java API的补充,对Java开发中常用功能进行更优雅的实现,使得编码更加轻松,代码容易理解。

    Poppler 21.01.0 发布,PDF 生成工具

    Poppler 21.01.0 发布了。 Poppler 是从 Xpdf 3.0 代码库派生而来的 PDF 生成工具包。Poppler 使用了各种 PDF 库(Evince,Okular

    TestableMock v0.6.0 发布,新增测试参数快速构造工具

    项目介绍 TestableMock是一款由阿里效能团队开源的Java单元测试增强工具,提供四项具有针对性的辅助能力: 快速Mock任意调用:解决传统Mock工具使用繁琐的问题 访问被测私有成员

    Zig 0.7.0 发布,想要替换 C 的编程语言

    Zig 0.7.0 已发布,这是一门通用编程语言,专为稳定性、可维护性和性能而设计,追求替代 C 语言在系统编程上的最佳地位。Zig 具有以下值得关注的特性: 手动管理内存 与 C 语言

    ActionView 1.12.0 发布,更好用的团队敏捷开发工具

    简介 ActionView是一个面向中小企业的、开源免费的、简单易用的、Jira的问题需求跟踪工具。 详细介绍:www.actionview.cn 码云:https://gitee.com

    单元测试增强工具TestableMock 让Mock返璞归真

    简介 阿里巴巴研发效能团队开源的Java单元测试增强工具,换种思路写Mock,让单元测试更简单。 无需初始化,不挑测试框架,甭管要换的方法是被测的私有方法、静态方法还是其他任何的成员方法,也甭管

    WeCube 2.7.0 版本发布,一站式架构和运维管理工具

    WeCube简介 微众银行在分布式架构实践的过程中,发现将银行核心系统构建于分布式架构之上,会遇到一些与传统单体应用不同的痛点(例如,服务器增多,部署难度大;调用链长,全链路跟踪困难; 系统复杂,问题定位时间长等),在逐步解决这些痛点的过程中,总...

    【开源资讯】Electron 10.1.4 发布,跨平台桌面应用开发工具

    简介 Electron 是 GitHub 发布的跨平台桌面应用开发工具,支持 Web 技术开发桌面应用,其本身是基于 C++ 开发的,GUI 核心来自于 Chrome,而

    mongoHelper 0.3.9 发布,spring-data-mongodb 增强工具包,简化 CRUD 操作

    mongoHelper 是基于 spring-data-mongodb 的增强工具包,简化 CRUD 操作,提供 jpa 的数据库操作。 传统关系型数据库及围绕它们构建的 orm 在项目开发中有很