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&lt;T&gt;</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(){            // Typestring @this = "Ordinal";            // Examplesvar 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(){            // Typestring @thisValue = "Fizz";        
          
string @thisNull = null;            // Examplesbool 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(){            // Typevar @this = new DataTable();            // Variables@this.Columns.AddRange("IntColumn", "StringColumn");@this.Rows.Add(1, "Fizz");@this.Rows.Add(2, "Buzz");            // ExemplesList<TestObject> entities = @this.ToEntities<TestObject>().ToList();            // Unit TestAssert.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 底层更加了解!


原文地址:http://www.cnblogs.com/davidzhou/p/5348460.html


.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/329699.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python isodd奇偶_Python这些位运算的妙用,绝对让你大开眼界

位运算的性能大家想必是清楚的&#xff0c;效率绝对高。相信爱好源码的同学&#xff0c;在学习阅读源码的过程中会发现不少源码使用了位运算。但是为啥在实际编程过程中应用少呢&#xff1f;想必最大的原因&#xff0c;是较为难懂。不过&#xff0c;在面试的过程中&#xff0c;…

java线程中断

【README】 本文po出了不同场景下线程中断的不同开发方式&#xff0c;包括阻塞&#xff0c;非阻塞&#xff0c;io阻塞线程等&#xff1b; 本文部分内容转自&#xff1a;这篇博文写的非常好 Thread的中断机制(interrupt) - 寂静沙滩 - 博客园先看收集了别人的文章&#xff0c…

WEB API系列(一):WEB API的适用场景、第一个实例

在我前一篇博客《WebAPI前置知识:HTTP与RestfulAPI》中已经给各位简单介绍了HTTP协议与RestFul API的关系&#xff0c;以及一些基本的HTTP协议知识&#xff0c;在这些知识的铺垫下&#xff0c;今天&#xff0c;我们一起来讨论一下WEB API的适用场景&#xff0c;然后写我们第一个…

rpa文件怎么提取内容_怎么编辑pdf文件内容?有什么软件可以编辑pdf文件吗?

怎么编辑pdf文件内容&#xff1f;我是2020年大学新生&#xff0c;选择学习的专业是财务管理。为了更快、更深入地了解更多专业知识&#xff0c;我上网查找、下载了很多相关资料。不过&#xff0c;从网上保存下来的资料文件大多是pdf格式的&#xff0c;想要编辑它还得先转word。…

Future取消线程执行

【README】 本文总结于 《java并发编程实战》 page121&#xff0c;非常棒的一本书&#xff1b; 【1】Future 1&#xff0c;介绍&#xff1a;future 用于管理任务的生命周期&#xff0c;处理异常&#xff0c;以及实现取消&#xff1b; 2&#xff0c;future.cancel() 取消方法…

Nancy之结合tinyfox给我们的应用提供简单的数据服务

说到提供数据服务给我们的一些应用&#xff0c;估计用的最多的也就是json和xml这两种数据格式 实现的方法也是多种多样&#xff0c;web api,mvc的jsonresult和contentresult...等等 本文是结合Nancy、TInyFox、Owin等来实现的 一、前提工作 新建一个空的web应用程序 添加相应的…

javaweb调用python算法_请教怎么用java远程调用python? 多谢

请问如何用java远程调用python? 谢谢&#xff01;本帖最后由 blackkettle 于 2015-05-07 13:00:41 编辑比如有一台机器 A上安装了python, 另一台机器B要用java 调用A 上的python的某个函数&#xff0c;输入数据在B机器上&#xff0c;所有的计算在A机器完成&#xff0c;结果返回…

(转)如何查看java本地方法

在线查看本地代码&#xff0c; refer2 http://hg.openjdk.java.net/jdk8/jdk8/hotspot/file/tip/src/os/linux/vm/os_linux.cpp 我们知道在java中查看java源码时看到native方法在java层面上就到头的&#xff0c;如果还想继续往下看就需要看jdk是如何实现的&#xff0c;今天就分…

统一配置中心的设计方案

转载自 统一配置中心的设计方案对于配置文件&#xff0c;我们不陌生&#xff0c;它提供我们可以动态修改程序运行能力。引用别人的一句话就是&#xff1a;系统运行时(runtime)飞行姿态的动态调整。我可以把我们的工作称之为在快速飞行的飞机上修理零件。我们人类总是无法掌控和…

微软CEO纳德拉恢弘计划:让开发者始终忘不了微软

BI中文站 4月11日 报道 当微软前CEO史蒂夫•鲍尔默&#xff08;Steve Ballmer&#xff09;在2000年喊出“开发者&#xff0c;开发者&#xff0c;开发者”的口号时&#xff0c;他可能有点儿激动&#xff0c;但是他的观点是对的。 30年前当Windows 1.0推出的时候&#xff0c;这种…

python scratch unity_Unity3D研究院之2D游戏开发制作原理(二十一)

经过了4个月不懈的努力&#xff0c;我和图灵教育合作的这本3D游戏开发书预计下个月就要出版了。这里MOMO先打一下广告&#xff0c;图灵的出版社编辑成员都非常给力&#xff0c;尤其是编辑小花为这本书付出了很大的努力&#xff0c;还有杨海玲老师&#xff0c;不然我也无法完成这…

原码补码与反码

【README】 1.本文内容总结自“哈工大刘宏伟”老师的mooc视频《计算机组成原理》on bilibili&#xff1b; 2.为了便于理解&#xff0c;本文引入了逗号分割符号部分和数值部分&#xff0c;计算机存储数据的时候没有逗号&#xff1b; 【1】原码表示法 原码定义&#xff1a; 原…

第一篇 Entity Framework Plus 之 Audit

一般系统会有登陆日志&#xff0c;操作日志&#xff0c;异常日志&#xff0c;已经满足大部分的需求了。但是有时候&#xff0c;还是需要Audit 审计日志&#xff0c;审计日志&#xff0c;主要针对数据增&#xff0c;改&#xff0c;删操作数据变化的记录&#xff0c;主要是对数据…

本想试试看,结果却拿到了京东的Offer

转载自 本想试试看&#xff0c;结果却拿到了京东的Offer 最近&#xff0c;春招已经基本接近尾声了&#xff0c;我找了几位拿到名企Offer的粉丝&#xff0c;请他们总结了面试经验&#xff0c;近期会分批的推送给大家。希望给那些正在准备秋招的同学提供些帮助。 今天给大家分享的…

ping 命令使用代理_网络检测知识篇:ping命令使用知识,你知道几点?

Ping命令其实是一个非常好的网络故障诊断工具&#xff0c;相信阅读完本文对大家一定有些帮助。如果大家网络遇到问题&#xff0c;不妨试试以下方法。首先使用Ping命令诊断本地TCP/IP协议是否安装正常&#xff0c;检测方法如下&#xff1a;从电脑开始里找到运行&#xff0c;快捷…

8.4-中断系统小结(cpu中断七个问题)

【README】 本文转自bilibili《计算机组成原理&#xff08;哈工大刘宏伟&#xff09;》的视频讲解&#xff0c;非常棒&#xff0c;墙裂推荐&#xff1b; 【1】中断介绍 1&#xff09;作用&#xff1a;用中断系统实现了外设数据的输入输出&#xff1b; 还可以用于程序调试&…

第二篇 Entity Framework Plus 之 Query Future

从性能的角度出发&#xff0c;能够减少 增&#xff0c;删&#xff0c;改&#xff0c;查&#xff0c;跟数据库打交道次数&#xff0c;肯定是对性能会有所提升的&#xff08;这里单纯是数据库部分&#xff09;。 今天主要怎样减少Entity Framework查询跟数据库打交道的次数&#…

python长整数相乘_python写的大整数相乘的方法

输入72106547548473106236 982161082972751393 两个大整数输出结果70820244829634538040848656466105986748解题思路首先根据 大整数相乘的原理的基础上&#xff0c;把大整数进行优化拆分&#xff0c;拆分的长度&#xff0c;要考虑语言中整形的长度。这里用的python&#xff0c…

Java Web应用的代码分层最佳实践

转载自 Java Web应用的代码分层最佳实践代码分层&#xff0c;对于任何一个Java Web开发来说应该都不陌生。一个好的层次划分不仅可以能使代码结构更加清楚&#xff0c;还可以使项目分工更加明确&#xff0c;可读性大大提升&#xff0c;更加有利于后期的维护和升级。从另外一个角…

中断屏蔽技术

【README】 本文总结自bilibili《计算机组成原理&#xff08;哈工大刘宏伟&#xff09;》的视频讲解&#xff0c;非常棒&#xff0c;墙裂推荐&#xff1b; 【1】中断屏蔽 1&#xff0c;中断屏蔽的意思是&#xff0c;在中断1的服务程序执行过程中&#xff0c;不允许被其他中断…