分享.net系统开发过程中积累的扩展方法 -买球官网平台

0顶
0踩

.net 3.5提供的扩展方法特性,可以在不修改原类型代码的情况下扩展它的功能。下面分享的这些扩展方法大部分来自于code project或是stackoverflow,.net为此还有一个专门提供扩展方法的网站(extensionmethod)。

涵盖类型转换,字符串处理,时间转化,集合操作等多个方面的扩展。

1 tolerantcast 匿名类型转换

这个需求来源于界面中使用backgroundworker,为了给dowork传递多个参数,又不想定义一个类型来完成,于是我会用到tolerantcast方法。参考如下的代码:
//创建匿名类型
var parm = new { bucket = bucket, auxiliaryaccischeck = chbauxiliaryacc.checked, allaccountischeck = chballaccount.checked };
backgroundworker.runworkerasync(parm);
 
 private void backgroundworker_dowork(object sender, doworkeventargs e)
 {
//解析转换匿名类型
 var parm = e.argument.tolerantcast(new { bucket = new relationpredicatebucket(), auxiliaryaccischeck = false, allaccountischeck = false });

2 foreach 集合操作

这个方法的定义很简单但也很实用,它的使用方法如下:
var buttons = getlistofbuttons() as ienumerable

扩展方法的源代码定义只有一行,源代码如下:
public static void foreach(this ienumerable @enum, action mapfunction)
{
 foreach (var item in @enum) mapfunction(item);
}

当我想对一个集合中的每个元素执行相同的操作时,常常会借助于此方法实现。
3 capitalize 字符串首字母大写

直接对字符串操作,将字符串的首字母改成大写,源代码参考如下:
public static string capitalize(this string word)
{
 if (word.length <= 1)
 return word;
return word[0].tostring().toupper()   word.substring(1);
}

4 todatatable 强类型对象集合转化为datatable

开发中经常会遇到将list转化为datatable,或是反之将datatable转化为list,stackoverflow上有很多这个需求的代码,参考下面的程序代码:
public static datatable todatatable(this ienumerable varlist)
 {
 datatable dtreturn = new datatable();
// column names 
 propertyinfo[] oprops = null;
if (varlist == null) return dtreturn;
foreach (t rec in varlist)
 {
 // use reflection to get property names, to create table, only first time, others will follow 
 if (oprops == null)
 {
 oprops = ((type) rec.gettype()).getproperties();
 foreach (propertyinfo pi in oprops)
 {
 type coltype = pi.propertytype;
if ((coltype.isgenerictype) && (coltype.getgenerictypedefinition() == typeof (nullable<>)))
 {
 coltype = coltype.getgenericarguments()[0];
 }
dtreturn.columns.add(new datacolumn(pi.name, coltype));
 }
 }
datarow dr = dtreturn.newrow();
foreach (propertyinfo pi in oprops)
 {
 dr[pi.name] = pi.getvalue(rec, null) == null ? dbnull.value : pi.getvalue
 (rec, null);
 }
dtreturn.rows.add(dr);
 }
 return dtreturn;
 }

5 setallvalues 给数组中的每个元素赋值

实现给数组中的每个元素赋相同的值。
public static t[] setallvalues(this t[] array, t value)
{
 for (int i = 0; i < array.length; i  )
 {
 array[i] = value;
 }
return array;
}

6 toxml 序列化对象为xml格式

可以将一个对象序列化为xml格式的字符串,保存对象的状态。
public static string toxml(this t o) where t : new()
{
 string retval;
 using (var ms = new memorystream())
 {
 var xs = new xmlserializer(typeof (t));
 xs.serialize(ms, o);
 ms.flush();
 ms.position = 0;
 var sr = new streamreader(ms);
 retval = sr.readtoend();
 }
 return retval;
}

7 between 值范围比较

可以判断一个值是否落在区间范围值中。
public static bool between(this t me, t lower, t upper) where t : icomparable
{
 return me.compareto(lower) >= 0 && me.compareto(upper) < 0;
}

类似这样的操作,下面的方法是取2个值的最大值。
public static t max(t value1, t value2) where t : icomparable
{
 return value1.compareto(value2) > 0 ? value1 : value2;
}

8 startdate duedate 开始值或末值

业务系统中常常会用到时间比较,如果系统是用datetime.now变量与datetime.today来作比较,前者总是大于后者的,为此需要做一个简单转化,根据需要将值转化为开始值或末值,也就是0点0分0秒,或是23时59分59秒。
public static datetime convertostartdate(this datetime datetime)
{
 return new datetime(datetime.year, datetime.month, datetime.day, 0, 0, 0);
}
public static datetime convertoduedate(this datetime datetime)
{
 return new datetime(datetime.year, datetime.month, datetime.day, 23, 59, 59);
}

9 first day last day 月的第一天或是最后一天
public static datetime first(this datetime current)
{
 datetime first = current.adddays(1 - current.day);
 return first;
}
public static datetime last(this datetime current)
{
 int daysinmonth = datetime.daysinmonth(current.year, current.month);
datetime last = current.first().adddays(daysinmonth - 1);
 return last;
}

10 percent 百分比值

计算前一个数值占后一个数值的百分比,常用于统计方面。
public static decimal percentof(this double position, int total)
{
 decimal result = 0;
 if (position > 0 && total > 0)
 result=(decimal)((decimal)position / (decimal)total * 100);
 return result;
}

扩展方法源代码下载:

来自:
来自:
0
0
评论 共 0 条 请登录后发表评论

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • 分享.net系统开发过程中积累的扩展方法共4页.pdf.zip

  • 分享.net系统开发过程中积累的扩展方法共4页.pdf.zip

  • 2、多年的技术积累和大量用户需求的汇总调整,保证了系统的安全性稳定性、易操作、管理维护简单的特点; 3、系统设计开发的规范性与全面性,利于系统的实现、测试、维护、版本升级等。开发人员既可全面了解oa系统...

  • 采用模块化方式开发,功能强大灵活易于扩展,发布版本都为核心功能框架的应用,面向中小型站点提供轻量级网站建设买球软件推荐的解决方案。xinyicms团队长期积累丰富的web开发经验,注重用户体验和实用的设计理念,使得xinyicms...

  • 系统实现了对信息数据的浏览、查询、编辑和管理等基本数据库操作,采用了模块化设计方法,根据用户的需求及程序的应用与维护的易用性,将各个部分置于不同的模块当中,方便了程序的扩展与维护,同时建立了程序功能...

  • 一提到web开发,目前在世界上流行性的三个帮派就是php,java和asp.net,这个世界上的百分之99的网站或者类似的应用都是由则三种...所以不管你是准备进入web开发的新人还是准备转型其它生态系统的老鸟,这篇文章都能给你

  • 最近偶然接触到了c#中的扩展方法,觉得这个语法特性是一个不错的特性,因此决定在这里系统地对c#中的扩展方法相关内容进行下总结和整理,因为博主觉得学习这件事情本身就是一个积累的过程,所以博主有时候会对现在的...

  • 今天跟大家分享一下我们在日常开发中并不常用的开发模式“插件系统模式”,什么叫插件从大一点的概念讲就是我们开发的软件是由很小的模块组成,每一块都能成功的装卸,使我们的软件成为一个有机体,在发生重大事故、...

  • 本书精选了428个典型实例,所选实例覆盖了asp.net开发中的热点问题和关键问题。全书按实际应用进行分类,可以使读者在短时间内掌握更多有用的技术,快速提高编程水平。所选内容均来源于实际项目的开发,有的实例是...

  • .net、java和php在web开发的优缺点 以上四种编程语言就是要与大家分享的主要内容,前三种是目前网站建设中常用到的三大主流语言,最后一种是近年来兴起的一种编程语言,企业在进行网站建设时可以根据自己的需求和...

  • 本书精选了428个典型实例,所选实例覆盖了asp.net开发中的热点问题和关键问题。全书按实际应用进行分类,可以使读者在短时间内掌握更多有用的技术,快速提高编程水平。所选内容均来源于实际项目的开发,有的实例是...

  • 软件开发,程序员就是不断地跟变量、方法、类、接口这些东西打交道,随着开发经验地积累,聪明的程序就会发现然开发出来的每个软件都不一样,但是它们在很多地方又都是一样的。每个软件的底层差不多都是需要进行增删...

  • 软件开发,程序员就是不断地跟变量、方法、类、接口这些东西打交道,随着开发经验的积累,很多程序员会发现,虽然最终开发出来的软件每个都不一样,但是在开发过程中用到的很多东西却又是相通的。例如,每个软件的...

  • .net开发十大常用工具软件分享

  • 在学习面向对象的c /java/c#等语言以前,最好具有一定的面向过程的编程经验,比如c语言。另外,在图1中还漏掉了一项比较重要的技术——数据库技术,对于希望今年暑假与大三同学一起实习的2004级学生来说,如果你们...

  • 自从学习.net以来,优雅的编程风格,极度简单的可扩展性,足够强大开发工具,极小的学习曲线,让我对这个平台产生了浓厚的兴趣,在工作和学习中也积累了一些开源的组件,就目前想到的先整理于此,如果再想到,就继续...

  • c#语言是c和c 语言演变而来的,是用于创建和...首先,这个平台覆盖了在操作系统上开发软件的所有方面,为集成microsoft 或任意平台上的显示技术、组件和数据技术提供了最大的可能。其次,创建出来的整个体系可以是i...

  • domino也暴露出一些明显的弱点,不妨将技术原理相同的.net/java与domino作一简单的比较(以oa应用为前提): .net/java更类似3gl工具,应用功能的实现需要更多的开发或集成,应用的成熟需要不断的进行功能沉淀与积累;...

  • 项目中的.net(含cd光盘1张)  李天平 编著 isbn978-7-121-17670-8 2012年8月出版 定价:108.00元(含光盘1张) 16开 772页 宣传语 本书别无它用,只能用来求职、做项目 直指.net核心优势,以商业实战指导...

global site tag (gtag.js) - google analytics