Z.ExtensionMethods 扩展类库
Z.ExtensionMethods 一个强大的开源扩展库
今天有意的在博客园里面搜索了一下 Z.ExtensionMethods 这个扩展类库,确发现只搜到跟这个真正相关的才两篇博文而已,我都点进去看了一下,也都只是提到而已,没有专门介绍,才引起我写这篇文档。
一. Z.ExtensionMethods 介绍
Z.ExtensionMethods 是国外(zzzprojects 的公司,这家公司开发EntityFramework 扩展库也很牛逼哦,不过要收费)开源的,且功能齐全,围绕着.NET Framework 而开发扩展类库,源代码C#&VB.NET两种语言。
Codeplex :http://zextensionmethods.codeplex.com/
GitHub:https://github.com/zzzprojects/Z.ExtensionMethods
在线文档:http://www.zzzprojects.com/documentations/dotnet/extension-methods/

贴一个Z.Data 对DataTable 转成 集合对象扩展,让大家伙开开眼,看这些代码熟悉不?

using System;
using System.Collections.Generic;
using System.Data;
using System.Reflection; public static partial class Extensions
{
/// <summary>
/// Enumerates to entities in this collection.
/// </summary>
/// <typeparam name="T">Generic type parameter.</typeparam>
/// <param name="this">The @this to act on.</param>
/// <returns>@this as an IEnumerable<T></returns>
public static IEnumerable<T> ToEntities<T>(this DataTable @this) where T : new()
{
Type type = typeof (T);
PropertyInfo[] properties = type.GetProperties(BindingFlags.Public | BindingFlags.Instance);
FieldInfo[] fields = type.GetFields(BindingFlags.Public | BindingFlags.Instance); var list = new List<T>(); foreach (DataRow dr in @this.Rows)
{
var entity = new T(); foreach (PropertyInfo property in properties)
{
if (@this.Columns.Contains(property.Name))
{
Type valueType = property.PropertyType;
property.SetValue(entity, dr[property.Name].To(valueType), null);
}
} foreach (FieldInfo field in fields)
{
if (@this.Columns.Contains(field.Name))
{
Type valueType = field.FieldType;
field.SetValue(entity, dr[field.Name].To(valueType));
}
} list.Add(entity);
} return list;
}
}

是不是感觉,之前我们自己写过这样的代码,现在不用自己写了,现成的拿来用就是,自己可以更加专注于更有意义的事情上,再来一段代码。

public static partial class Extensions
{
/// <summary>
/// A string extension method that queries if '@this' is null or is empty.
/// </summary>
/// <param name="this">The @this to act on.</param>
/// <returns>true if '@this' is null or is empty, false if not.</returns>
public static bool IsNullOrEmpty(this string @this)
{
return string.IsNullOrEmpty(@this);
}
}

判断字符串是否为空或Null,"字符串".IsNullOrEmpty() 是不是更加能够理解,感觉就像读一句话一样,
像这样的DataTable转对象集合以及判断一个对象是否为空或者Null人性写法,在Z.ExtensionMethods 扩展类库里面到处能够找到,大家有空可以打开它的源代码学习一下。
一. Z.ExtensionMethods 使用
1. 通过NuGet 程序包管理器,下载Z.ExtensionMethods Dll,右键-》你需要使用 Z.ExtensionMethods 类库 项目-》管理NuGet程序包-》联机-》右上角搜索“Z.ExtensionMethods” 下载安装
2. 使用起来很简单,下面是几段单元测试代码

using System;
using Microsoft.VisualStudio.TestTools.UnitTesting; namespace Z.Core.Test
{
[TestClass]
public class System_String_ToEnum
{
[TestMethod]
public void ToEnum()
{
// Type
string @this = "Ordinal"; // Examples
var value = @this.ToEnum<StringComparison>(); // return StringComparison.Ordinal; // Unit Test
Assert.AreEqual(StringComparison.Ordinal, value);
}
}
}


using Microsoft.VisualStudio.TestTools.UnitTesting; namespace Z.Core.Test
{
[TestClass]
public class System_String_IsNullOrEmpty
{
[TestMethod]
public void IsNullOrEmpty()
{
// Type
string @thisValue = "Fizz";
string @thisNull = null; // Examples
bool value1 = @thisValue.IsNullOrEmpty(); // return false;
bool value2 = @thisNull.IsNullOrEmpty(); // return true; // Unit Test
Assert.IsFalse(value1);
Assert.IsTrue(value2);
}
}
}


using System.Collections.Generic;
using System.Data;
using System.Linq;
using Microsoft.VisualStudio.TestTools.UnitTesting; namespace Z.Data.Test
{
[TestClass]
public class System_Data_DataTable_ToEntities
{
[TestMethod]
public void ToEntities()
{
// Type
var @this = new DataTable(); // Variables
@this.Columns.AddRange("IntColumn", "StringColumn");
@this.Rows.Add(1, "Fizz");
@this.Rows.Add(2, "Buzz"); // Exemples
List<TestObject> entities = @this.ToEntities<TestObject>().ToList(); // Unit Test
Assert.AreEqual(2, entities.Count);
Assert.AreEqual(1, entities[0].IntColumn);
Assert.AreEqual("Fizz", entities[0].StringColumn);
Assert.AreEqual(2, entities[1].IntColumn);
Assert.AreEqual("Buzz", entities[1].StringColumn);
} public class TestObject
{
public int IntColumn;
public int IntColumnNotExists = -1;
public string StringColumnNotExists;
public string StringColumn { get; set; }
}
}
}

好了不多说了,大家如果要实现一些功能,可以参考开发文档,再看一下源代码,学习一下,也会有帮助,最受对.NET Framework 底层更加了解!
Z.ExtensionMethods 扩展类库的更多相关文章
- Z.ExtensionMethods 一个强大的开源扩展库
今天有意的在博客园里面搜索了一下 Z.ExtensionMethods 这个扩展类库,确发现只搜到跟这个真正相关的才两篇博文而已,我都点进去看了一下,也都只是提到而已,没有专门介绍,才引起我写这篇文档 ...
- 让时间处理简单化 【第三方扩展类库org.apache.commons.lang.time】
JAVA的时间日期处理一直是一个比较复杂的问题,大多数程序员都不能很轻松的来处理这些问题.首先Java中关于时间的类,从 JDK 1.1 开始,Date的作用很有限,相应的功能已由Calendar与D ...
- 让EFCore更疯狂些的扩展类库(一):通过json文件配置sql语句
前言 EF通过linq和各种扩展方法,再加上实体模型,编写数据库的访问代码确实是优美.舒服,但是生成的sql不尽如意.性能低下,尤其是复杂些的逻辑关系,最终大家还是会回归自然,选择能够友好执行sql语 ...
- 让EFCore更疯狂些的扩展类库(二):查询缓存、分部sql、表名替换的策略配置
前言 上一篇介绍了扩展类库的功能简介,通过json文件配置sql语句 和 sql语句的直接执行,这篇开始说明sql配置的策略模块:策略管理器与各种策略的配置. 类库源码:github:https:// ...
- thinkphp5.1 使用第三方扩展类库
此案例介绍的不是通过composer加载的,是手工下载放入extend目录下的扩展类库,仍然以phpspider为例 将owner888目录放入extend目录下,也可以直接将phpspider目录放 ...
- [原创][开源]SunnyUI.Net, C# .Net WinForm开源控件库、工具类库、扩展类库、多页面开发框架
SunnyUI.Net, 基于 C# .Net WinForm 开源控件库.工具类库.扩展类库.多页面开发框架 Blog: https://www.cnblogs.com/yhuse Gitee: h ...
- (转)Entity Framework Extended Library (EF扩展类库,支持批量更新、删除、合并多个查询等)
转自:http://www.cnblogs.com/jinzhao/archive/2013/05/31/3108755.html 今天乍一看,园子里居然没有关于这个类库的文章,实在是意外毕竟已经有很 ...
- ThinkPHP - 自定义扩展类库
首先在想要使用类库的地方建立文件夹,文件名称随意,不能使用class 然后在配置文件中: 'AUTOLOAD_NAMESPACE' => array( 'Lib' => './Lib', ...
- tp5 加载第三方扩展类库与手动加载的问题
=============================================================== <?phpnamespace my; /*** 加载第三方类库*/ ...
随机推荐
- ZigBee研究之旅(一)
*********************************************************************** 以下有引用webee公司的文档的内容,版权属于webee ...
- Swift - 类型嵌套(以扑克牌结构体为例)
类型嵌套,简单来说实在一个类型中包含另外一个类型.我们拿一副扑克来说明. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 //类 ...
- android图片压缩的3种方法实例
android 图片压缩方法: 第一:质量压缩法: private Bitmap compressImage(Bitmap image) { ByteArrayOutputStream baos = ...
- phabricator在mac上的搭建(转)
环境:OS X Yosemite 10.10.5 前提:phabricator主要是由php写的,而且是以website方式运行的,所以mac上要先安装好 php + nginx(或apache) + ...
- 第十七篇:实例分析(1)--初探WDDM驱动学习笔记(八)
第四篇(VidPN)中提到过MIRROR驱动. 在进入本篇的实际内容前, 带着好奇心, 想请教CSDN中的显卡驱动方面的大虾, 怎样才干把这个驱动玩起来, 这个驱动的作用是什么,等等, 敬请不吝赐教. ...
- [IDEs]Eclipse For Mac , 常用快捷键
Cmd + O: 查看.java中得方法,变量,等结构 Cmd + T: 查看继承关系 Cmd + K: 查找下一个选中的成员 Cmd + E: 查看已经打开的文件 Cm ...
- jsonp与cors跨域的一些理解(转)
CORS其实出现时间不短了,它在维基百科上的定义是:跨域资源共享(CORS )是一种网络浏览器的技术规范,它为Web服务器定义了一种方式,允许网页从不同的域访问其资源.而这种访问是被同源策略所禁止的. ...
- Eclipse插件引入jar包的方法(转)
搞了两天,终于找到解决办法了.原来 Eclipse 插件项目引入外面的jar包不能用 build path---->add external jars的方法. 先说明两个概念:类加载器,O ...
- VMware Workstation(虚拟机软件) V10.0 简体中文版可以安装了
在虚拟机软件中VMware Workstation算是一款非常强大较稳定的软件了,今天 VMware Workstation 10.0正式发布了,最让人欣喜的是该版本终于有了简体中 文版了,从现在开始 ...
- 《转》VC++多线程编程
原地址:http://www.cnblogs.com/wxfasdic/archive/2010/09/23/1833522.html 留个纪念,不错的总结.十个例子清晰列举啦多线程编程的奥妙. V ...