上一页 1 ··· 14 15 16 17 18 19 20 21 22 ··· 40 下一页
摘要: string是各种编程语言中最基础的数据类型,长期以来受尽其它类的压迫,经常被肢解(Substring、Split)、蹂躏(Join)...而现在string要“翻身闹革命”了,它几乎无所不能,可以为所欲为,令其它类心惊胆颤...让我们来看一下革命后的string做了些什么?打开文件或网址1"c:\\t.txt".Open();2"http://www.cnblogs.com/ldp615/".Open();怎么做到的呢?看扩展,很简单,直接调用调用了Process.Start函数:1publicstaticvoidOpen(thisstrings)2{ 阅读全文
posted @ 2013-06-09 13:42 于为 阅读(325) 评论(0) 推荐(0) 编辑
摘要: 变态篇二中给出了对if/else、swith/case及while 的扩展,大家评价各不相同,其实本人也感觉有点牵强。其中举了一个Swith扩展的应用,今天突然有了新想法,对它改进了一些。所谓“语不惊人死不休”,且看这次的改进如何。我先把扩展的源代码贴出来,折叠一下,等看完后面的例子和讲解再回来看。(和前面一样,本文侧重想法,代码演示用,如需使用,请自行完善)1publicstaticclassSwithCaseExtension2{3#regionSwithCase4publicclassSwithCase<TCase,TOther>5{6publicSwithCase(TCas 阅读全文
posted @ 2013-06-09 13:41 于为 阅读(316) 评论(0) 推荐(0) 编辑
摘要: 本文探讨如何使用扩展方法封装 if/else、swith/case及while,通过使用这些扩展,写出的代码将使用很少的大括号{ }。扩展的效果如何,还请大家来评判!声明:本文属于(改)变(形)态篇,只是提出一种想法,所提供的代码也只是示例,可以测试通过,但不完善。首先我们来对看if/else和swith/case,两者在代码中都用来表达分支结构。这里我们统一封装成一个If扩展:publicstaticTIf<T>(thisTt,Predicate<T>predicate,Action<T>action)whereT:class{if(t==null)thr 阅读全文
posted @ 2013-06-09 13:39 于为 阅读(283) 评论(0) 推荐(0) 编辑
摘要: 先回顾一个数列的概念:按一定次序排列的一列 数 称为数列...(请参见百度百科:数列)几个简单的数列:1, 1, 1, 1, 1, 1, 1... //数列10, 1, 2, 3, 4, 5, 6, 7... //数列20, 1, 4, 9, 16, 25, 36, 49... //数列3通项公式的定义:数列的第n项与项的序数这间的关系,也就是数列生成算法上面几个数列可表示为An = F(n) = 1An = F(n) = nAn = F(n) = n * n有了数列和通项公式的定义,我们的任务就好描述了:用最简洁的代码描述通项公式,用最简洁算法生成数列的前N个数。在此要求下,用常规代码是做不 阅读全文
posted @ 2013-06-09 13:38 于为 阅读(186) 评论(0) 推荐(0) 编辑
摘要: 下面是Queryable 类中最常用的两个排序的扩展方法:12 public static IOrderedQueryable<TSource> OrderBy<TSource, TKey>(this IQueryable<TSource> source, Expression<Func<TSource, TKey>> keySelector); public static IOrderedQueryable<TSource> OrderByDescending<TSource, TKey>(this IQue 阅读全文
posted @ 2013-06-09 13:37 于为 阅读(490) 评论(0) 推荐(0) 编辑
摘要: Type 类提供了大量的属性和方法,但在一些基础性开发工作中,Type类功能还有些欠缺,尤其上在处理泛型类型时,如可空类型和泛型集合类型。下面的类就针对这些地方进行扩展。扩展源码1publicstaticclassTypeHelper2{3publicstaticboolIsNullableType(thisTypetype)4{5return(((type!=null)&&type.IsGenericType)&&6(type.GetGenericTypeDefinition()==typeof(Nullable<>)));7}89publicst 阅读全文
posted @ 2013-06-09 13:36 于为 阅读(274) 评论(0) 推荐(0) 编辑
摘要: 我的上一篇随笔《c#扩展方法奇思妙用高级篇六:WinForm 控件选择器》中给出了一个WinForm的选择器,其实质就是一个“树”的遍历器,但这个遍历局限于WinForm的Control类。在数据结构中,“树”的遍历是一个通用算法,那我们为什么不做一个通用的“树”遍历扩展呢?先看一个简单的类People(将作为测试用的例子):1publicabstractclassPeople2{3publicboolIsMale{get;privateset;}4publicabstractIEnumerable<People>Children{get;}5}People类有一个Children 阅读全文
posted @ 2013-06-09 13:28 于为 阅读(281) 评论(0) 推荐(0) 编辑
摘要: 在Web开发中,jQuery提供了功能异常强大的$选择器来帮助我们获取页面上的对象。但在WinForm中,.Net似乎没有这样一个使用起来比较方便的选择器。好在我们有扩展方法,可以很方便的打造一个。我们先看几个类图,深入认识一下我们常用的WinForm控件:图1 ScrollableControl类图图2 ButtonBase类图图3 TextBoxBase类图图4 ListControl类图图5 Label类图图6 其它常用从图1中可以看出,Form与Button、Label一样,也是一个Control。WinForm中的一些控件(如Form、GroupBox、Panel)可以包含其它控件, 阅读全文
posted @ 2013-06-09 13:27 于为 阅读(471) 评论(0) 推荐(0) 编辑
摘要: 在.Net中,System.Object.ToString()是用得最多的方法之一,ToString()方法在Object类中被定义为virtual,Object类给了它一个默认实现:1publicvirtualstringToString()2{3returnthis.GetType().ToString();4}.Net中原生的class或struct,如int,DateTime等都对它进行重写(override),以让它返回更有价值的值,而不是类型的名称。合理重写的ToString()方法中编程、调试中给我们很大方便。但终究一个类只有一个ToString()方法,不能满足我们多样化的需求 阅读全文
posted @ 2013-06-09 13:26 于为 阅读(270) 评论(0) 推荐(0) 编辑
摘要: 从系列文章开篇到现在,已经实现的很多扩展了,但过多的扩展会给我们带来很多麻烦,试看下图:面对这么多“泛滥”的扩展,很多人都会感到很别扭,的确有种“喧宾夺主”的感觉,想从中找出真正想用的方法来太难了!尽管经过扩展后的string类很“强大”,但易用性确很差。很多人因此感觉扩展应适可而止,不该再继续下去...其实这是一种逃避问题的态度,出现问题我们应该主动去解决,而不是去回避!有很多种方法可以解决以上问题,最简单的就是使用将扩展放入不同namespace中,使用时按需using相应namespace,可达到一定效果。但这种方法有很大缺点:一个命名空间中的扩展若太多同样会让我们的智能提示充斥着扩展方 阅读全文
posted @ 2013-06-09 13:25 于为 阅读(261) 评论(0) 推荐(0) 编辑
上一页 1 ··· 14 15 16 17 18 19 20 21 22 ··· 40 下一页