Newbe.ObjectVisitor 正在参加 2020 年度 OSC 中国开源项目评选,请投票支持!
Newbe.ObjectVisitor 在 2020 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
投票让它出道
已投票
Newbe.ObjectVisitor 获得 2020 年度 OSC 中国开源项目评选「最佳人气项目」 !
Newbe.ObjectVisitor 获得 2020 年度 OSC 中国开源项目评选「最佳人气项目」「最积极运营项目」 !
Newbe.ObjectVisitor 获得 2020 年度 OSC 中国开源项目评选「最积极运营项目」 !

软件简介

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的对象映射器但是拥有更好的性能,诸如此类。
展开阅读全文

代码

的 Gitee 指数为
超过 的项目

评论 (3)

加载中
不错,支持下
2020/11/04 10:57
回复
举报
foreach应该直接运行 不应该run了 虽然可能你是想做优化 但foreach一般是最后一个操作
2020/11/03 16:49
回复
举报
Newbe36524软件作者
其实就是优化。编译后的委托才会比反射快,否则必反射还慢。而且实际上,更多是因为,foreach 之后,还可以生成代码,编译委托,查看表达式之类的。其实这个 run 就相当于这个 builder 模式的最后一个 build 操作。目前看来,我还没有更好的办法.
2020/11/03 20:49
回复
举报
更多评论
发表于开发技能专区
2020/12/09 08:55

C# 工具包 Newbe.ObjectVisitor 0.4.4 发布,模型验证器上线

更新内容 完全基于表达式树的模型验证器 本版本,我们带来了基于表达式树实现的模型验证器。并实现了很多内置的验证方法。 我们罗列了与 FluentValidation 比较的情况: Build in Validators FluentValidation 9.X Newbe.ObjectVistor NotNull ✔️ ✔️ NotNull; class NotEmpty ✔️ ✔️ NotEmpty; string,enumerable NotEqual ✔️ :hea...

6
6
发表于开发技能专区
2020/11/17 09:13

C#工具包 Newbe.ObjectVisitor 0.3.7 发布,自动生成 FluentAPI

Newbe.Claptrap 0.3.7 发布,自动生成 FluentAPI。 更新内容 原本,我们希望在 0.3 引入 mapper 或者 validation 其中之一。但是我们发现,我们需要完成更高层次的抽象才能更好的开展后续的工作。 因此。 0.3 版本我们完成了一个既酷炫又新奇,既引人深思又充满快乐的特性: 基于状态图自动生成任意设计的 FluentAPI。 详细说明的篇幅很长,可以通过参阅下面这篇文章进行查看: 《我画着图,FluentAPI 她自己就生成了》 项目说明...

1
6
发表于数据库专区
2020/11/09 09:02

C#工具包 Newbe.Claptrap 0.2.10 发布,更花里胡哨

Newbe.Claptrap 0.2.10 发布,更花里胡哨。 更新内容 我们增加了简体中文的项目说明: https://gitee.com/yks/Newbe.ObjectVisitor/blob/main/README_zh_Hans.md 现在,你可以通过上下文修改属性的值了: //✔️ from 0.2 // 可以修改属性 o.V().ForEach((context) => ModifyData(context)).Run(); public static void ModifyData(IObjectVisitorContext<Yueluo,string> context) { context.Value...

1
9
发表于开发技能专区
2020/11/02 09:15

Newbe.ObjectVisitor 0.1.4 发布,轻装登场

Newbe.Claptrap 0.1.4 发布,初始版本。 更新内容 我们发布了第一个版本。0.1 版本中我们完成了最基础的 ForEach API,并且实现了 FormatString 方法。 视频 与此类库相关的视频《戏精分享C#表达式树,第一季》已经顺利发布,总计约十个小时。开发者可以前往以下地址查看相关概念和用法。 https://www.bilibili.com/video/BV15y4y1r7pK 基准测试 我们对初始版本进行了基准测试。得出了以下结论,详细的内容也可以前往仓库首页查...

4
4
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
发表了博客
2020/11/12 14:18

Newbe.ObjectVisitor 0.2.10 发布,更花里胡哨

更新内容 现在,你可以通过上下文修改属性的值了: //✔️ from 0.2 // 可以修改属性 o.V().ForEach((context) => ModifyData(context)).Run(); public static void ModifyData(IObjectVisitorContext<Yueluo,string> context) {     context.Value = context.Value.SubString(0,1); } 现在,支持多次 ForEach 操作: // ✔️ from 0.2 // 多重 foreach o.V().ForEach((context)=>{}).ForEach((context...

0
0
发表于开发技能专区
2020/11/10 08:00

Newbe.ObjectVisitor 0.2.10 发布,更花里胡哨

更新内容 现在,你可以通过上下文修改属性的值了: //✔️ from 0.2 // 可以修改属性 o.V().ForEach((context) => ModifyData(context)).Run(); public static void ModifyData(IObjectVisitorContext<Yueluo,string> context) {     context.Value = context.Value.SubString(0,1); } 现在,支持多次 ForEach 操作: // ✔️ from 0.2 // 多重 foreach o.V().ForEach((context)=>{}).ForEach((context)=...

0
0
发表了博客
2019/11/22 17:18

Spring Security技术栈开发企业级认证与授权(一)环境搭建

本项目是基于慕课网的Spring Security技术栈开发企业级认证与授权,采用IDEA开发,本文章用来记录该项目的学习过程。 慕课网视频:https://coding.imooc.com/class/134.html 一、项目结构 newbe-security是父类,打包方式是pom,其余都是子模块,打包方式jar. 项目模块介绍: 二、项目依赖 2.1newbe-security父类依赖 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xml...

0
1
发表了博客
2020/04/11 07:36

在C#中使用依赖注入

依赖注入(Dependency Injection,缩写为DI)是一种实现(Inversion of Control,缩写为IoC)的方法。在编写C#代码时,使用这种方法能够解决一些场景的需求。本系列将通过若干个实际问题,向读者介绍如何在C#中使用依赖注入。 阅读说明 软件要求 本系列文章将基于以下基本的软件运行环境 项目 内容 操作系统 Microsoft Windows 10 专业版 10.0.17134 IDE Visual Studio 2017 15.8.3 DI框架选择 C#开发中可选的DI框架众多。本系列...

0
1
发表了博客
2018/09/04 16:38

Loj10066新的开始[解题报告]

题目描述 发展采矿业当然首先得有矿井,小 FF 花了上次探险获得的千分之一的财富请人在岛上挖了 nnn 口矿井,但他似乎忘记考虑的矿井供电问题…… 为了保证电力的供应,小 FF 想到了两种办法: 在这一口矿井上建立一个发电站,费用为 vvv(发电站的输出功率可以供给任意多个矿井)。 将这口矿井与另外的已经有电力供应的矿井之间建立电网,费用为 ppp。 小 FF 希望身为「NewBe_One」计划首席工程师的你帮他想出一个保证所有矿井...

0
0
发表于开发技能专区
2020/12/08 21:39

Newbe.ObjectVisitor 0.4.4 发布,模型验证器上线

Newbe.Claptrap 0.4.4 发布,模型验证器上线。 更新内容 完全基于表达式树的模型验证器 本版本,我们带来了基于表达式树实现的模型验证器。并实现了很多内置的验证方法。 我们罗列了与 FluentValidation 比较的情况: Build in Validators FluentValidation 9.X Newbe.ObjectVistor NotNull ✔️ ✔️ NotNull; class NotEmpty ✔️ ✔️ NotEmpty; string,enumerable NotEqual ✔️ ✔️ NotEqual; all Equal ✔️ ✔️ Equal;...

0
0
2020/06/16 21:25

docker-mcr 助您全速下载 dotnet 镜像

2018 年五月之后,微软将后续发布的所有 docker image 都推送到了 MCR (Miscrosoft Container Registry),但在中国大陆,它的速度实在是令人发指,本文将介绍一种方法来解决这个问题。 如何使用 下载方式 存在至少三种方法进行加速: 使用 docker-mcr (推荐) 拉取国内服务器上的镜像 使用 DockerHub 加速器 注意,无论采用什么方式,请先确保本地的 docker 已经正常可用。 使用 docker-mcr docker-mcr 是一个 dotnet core ...

0
1
发表于云计算专区
2020/08/17 08:45

年轻的樵夫哟,你掉的是这个免费 8 核 4G 公网服务器,还是这个随时可用的 Docker 实验平台?

小孩子才做选择,成年人全都要。那么我们现在就来看看如何获得一台免费的 8 核 4G 公网 Docker 实验平台服务器。 Play With Docker 直接打开 https://labs.play-with-docker.com/ 即可访问 Play With Docker 平台。 注册一个 DockerHub 账号便可以访问这个站点,轻松地获得一台 8 核 4G 的公网服务器。 接下来我们就来了解一下如何使用这台服务器进行一些 Docker 的操作。 部署 Nginx 本示例,我们部署一个 nginx ,并且通过将服...

0
0
发表了博客
2020/08/11 08:25

十多位全球技术专家,为你献上近十个小时的.Net微服务介绍

.Net Conf: Focus on Microservices 是 .Net Conf 社区在 2020 年 7 月 30 日举办的线上分享活动。整个活动视频长达近 10 个小时。今天我们来看看都发生了什么。 章节汇总 本次分享由十多位来自全球的资深技术专家在线分享,涵盖了当前 .Net 在微服务领域的利器。包括有以下这些内容: .Net 最新特性与微服务 为何关注微服务(Why You Should Care About Microservices) 保持技术敏锐(Stay Sharp) 使用 Steeltoe 开启 .NET 微...

0
0
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
暂无内容
3 评论
22 收藏
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部