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; /*** 加载第三方类库*/ ...
随机推荐
-
通俗理解T检验与F检验的区别【转】
转自:http://blog.sina.com.cn/s/blog_4ee13c2c01016div.html1,T检验和F检验的由来一般而言,为了确定从样本(sample)统计结果推论至总体时所犯错 ...
-
Orchard 刨析:导航篇
之前承诺过针对Orchard Framework写一个系列.本应该在昨天写下这篇导航篇,不过昨天比较累偷懒的去玩了两盘单机游戏哈哈.下面进入正题. 写在前面 面向读者 之前和本文一再以Orchard ...
-
GridView 服务端控件添加 js
针对服务端控件的 CommandField “Delete” 添加 js $("#GridView1").find("a").each( function() ...
-
(转)关于redis、memcache、mongoDB 的对比
从以下几个维度,对redis.memcache.mongoDB 做了对比,欢迎拍砖 1.性能 都比较高,性能对我们来说应该都不是瓶颈 总体来讲,TPS方面redis和memcache差不多,要大于mo ...
-
How to Read, Write XLSX File in Java - Apach POI Example---reference
No matter how Microsoft is doing in comparison with Google, Microsoft Office is still the most used ...
-
CentOS6.5 安装mysql5.6.30
1.下载解压由于系统会自带mysql5.1版本的数据库,需要卸载.[root@localhost src]# yum remove -y mysql-libs[root@localhost src]# ...
-
Android 各层中日志打印功能的应用
1. HAL层 头文件:#include <utils/Log.h> 对应的级别 打印方法 VERBOSE LOGV()DEBUG LOGD()INFO LOGI()WARN LOGW() ...
-
【WC2015】混淆与破解 (Goldreich-Levin 算法)
这个嘛= =直接贴VFK的题解就行了吧,感觉自己还是差别人太多 http://vfleaking.blog.uoj.ac/blog/104 讲得挺明白了的说,但还是挺难理解的说,中间实现部分简直不要太 ...
-
STM32F103RC进入串口3接收中断产生HardFault_Hander问题解决!
最近在以前的项目上添加串口3通讯后,程序一进入接收中断后就产生HardFault_Hander.串口3发送数据一切正常,当打开串口3接收功能时,程序就处于HardFault_Hander状态,而导致死 ...
-
centos7.3搭建lamp实现使用wordpress
``` 环境说明: 在同一台主机上实现LAMP(Linux + Apache + MariaDB + PHP) CentOS 7.3.Apache 2.4.6.MariaDB 5.5.52.PHP 5 ...