代码改变世界

随笔分类 - c#

使用 Lambda 表达式编写递归五:推导装配脑袋的 Fix

2013-04-11 10:31 by 鹤冲天, 3025 阅读, 收藏, 编辑
摘要:<img src="http://www.cnblogs.com/images/cnblogs_com/ldp615/469308/t_Print%20Gallery.jpg" class="desc_img"/> 装配脑袋 给出的 Fix 函数精简到极致: Func&lt;T, TResult&gt; Fix&lt;T, TResult&gt;(Func&lt;Func&lt;T,TResult&gt;, Func&lt;T,TResult&gt;&gt; f) { &#160;&#160;&#160;&#160; return t =&gt; f(Fix(f))(t); } 本文通过 λ 演算导出。 阅读全文

使用 Lambda 表达式编写递归四:实现 Θ 组合子

2013-04-10 20:33 by 鹤冲天, 2585 阅读, 收藏, 编辑
摘要:<img src="http://www.cnblogs.com/images/cnblogs_com/ldp615/469308/t_Fish%20and%20Scales%20-%20small.png" width="147px" class="desc_img"/> 上一篇文章已经实现了 Y 组合子。 本文将实现另一个不动点组合子: Θ 组合子。 Θ 组合子也是一个常见不动点组合子,由 阿兰·图灵 发现,也称为图灵不动点组合子: Θ = (λx.λy.(y(x x y))) (λx.λy.(y(x x y))) 阅读全文

使用 Lambda 表达式编写递归三:实现 Y 组合子

2013-04-10 17:31 by 鹤冲天, 5386 阅读, 收藏, 编辑
摘要:<img src="http://images.cnblogs.com/cnblogs_com/ldp615/469111/o_lambda.png" class="desc_img"/> 也许你我都难以理解,为什么有人对她痴迷疯狂,铭记在心中不说,还要刻在身上。 她让人绞尽脑汁,也琢磨不定!她让人心力憔悴,又百般回味! 她,看似平淡,却深藏玄机!她,貌不惊人,却天下无敌! 她是谁?她就是... 阅读全文

使用 Lambda 表达式编写递归二:推断 FIX、g 的类型

2013-04-09 20:41 by 鹤冲天, 2704 阅读, 收藏, 编辑
摘要:<img src="http://images.cnblogs.com/cnblogs_com/ldp615/469308/t_Stars.gif" class="desc_img"/> 上一章节介绍的 λ 演算是无类型的,对于 FIX、g 我们只知道: 它们都是有独个参数的函数,它们的参数本身也是一个只有单一参数的函数... 基于这种描述,是无法将 FIX、g 转化为 c# 代码的,我们需要推断出 FIX、g 类型。 阅读全文

使用 Lambda 表达式编写递归一:前言及基础

2013-04-09 16:31 by 鹤冲天, 9360 阅读, 收藏, 编辑
摘要:<img src="http://images.cnblogs.com/cnblogs_com/ldp615/469308/t_Drawing%20Hands.gif" class="desc_img"/> 这是一个比较古老的话题,三年半之前,老赵就此写过一篇很文章《使用Lambda表达式编写递归函数》。其中提出了伪递归的概念,提出了自己的解决方式,也引出了装配脑袋 使用不动点组合子 的解决办法。 最近比较轻闲,静下心来学习了下λ演算、不动点组合子的一些理论,并深入思考,略有所悟,在此和大家分享下。 本文及后续章节会用到相当复杂的泛型及 lambda 表达式,请做好相关技术和心理准备。 阅读全文

替代反射调用的几种方式及性能测试

2013-03-31 17:25 by 鹤冲天, 7522 阅读, 收藏, 编辑
摘要:园子里和这个话题的相关文章比较多,本文是旧话重提,外加个小的总结。主要因为近期看到很多同事、朋友都已经使用 VS2012 进行 .NET 4.5 开发了,却还在大量使用反射,不知道用新的方式。或有所了解,但又害怕性能不好不敢大胆去用。 阅读全文

c# 扩展方法 奇思妙用 高级篇 九:OrderBy(string propertyName, bool desc)

2012-01-15 18:41 by 鹤冲天, 26489 阅读, 收藏, 编辑
摘要:如题,本文实现 OrderBy(string propertyName, bool desc) 扩展方法,以弥补 Linq 原生排序方法的不足 阅读全文

Linq:切勿使用 Count() > 0 来判断集合非空

2011-12-11 20:51 by 鹤冲天, 22882 阅读, 收藏, 编辑
摘要:如题,使用 Linq 时切勿使用 Count() > 0 来判断集合非空,这样做可能会带来严重的性能问题 阅读全文

c# 扩展方法奇思妙用基础篇十:IsEmpty、IsNotEmpty 扩展

2011-12-10 22:45 by 鹤冲天, 6591 阅读, 收藏, 编辑
摘要:IsEmpty、IsNotEmpty 扩展方法,用来确定序列是否包含元素。 阅读全文

四行代码创建复杂(无限级)树

2011-12-09 20:38 by 鹤冲天, 6896 阅读, 收藏, 编辑
摘要:最近两三天一直在做树方面的基础工作,碰巧今天在博客园看到一篇关于动态创建树文章,粗略浏览下,感觉有不够强大。相比而言,感觉自己的方式更好些,只需要四行代码就可以创建一颗复杂的无限级树 阅读全文

你能指出这个 ForEach 扩展方法中的错误吗?

2011-10-07 16:06 by 鹤冲天, 4357 阅读, 收藏, 编辑
摘要:Linq 中没有原生的 ForEach 扩展方法,我们可以很轻松的扩展一个......但这个有返回值的实现中有错误的,你能指出吗? 阅读全文

复用 Entity Framework 中英语单复数形式变换的类

2011-09-21 21:24 by 鹤冲天, 4145 阅读, 收藏, 编辑
摘要:数据库表名用复数、实体类名用单数,集合属性用单数…编程中经常会遇到英语单复变换的问题,你能准确处理吗?对我来说,十年前或许可以,but don't worry,我们有现成的类提供些类服务,来自 EntityFrameWork。 阅读全文

ASP.NET MVC:Expression Trees 作为参数简化查询 二

2011-09-18 17:25 by 鹤冲天, 4992 阅读, 收藏, 编辑
摘要:Expression Trees 可用作 Action 的参数来简化查询,前文中给出的 QueryConditionExpressionModelBinder 类,比较僵化,无法满足实际要求。本文将会从这个类为起点,基于 Convention 构建一个灵活的解决方案。 阅读全文

ASP.NET MVC:Expression Trees 作为参数简化查询

2011-09-16 23:09 by 鹤冲天, 6966 阅读, 收藏, 编辑
摘要:MVC 引入了 ModelBinder,让我们可以在 Action 中以强类型参数的形式接收 Request 中的数据。在查询 Action 中,我们可以将 Expression Trees 用作参数,通过自定义的 ModelBinder 动态自动构建查询表达式树,进一步发挥 MVC 的威力,简化编码工作。 阅读全文

c# 扩展方法奇思妙用基础篇九:Expression 扩展

2011-09-15 17:18 by 鹤冲天, 24338 阅读, 收藏, 编辑
摘要:使用 Expression 类创建 Expression Trees 的代码往往比较繁琐,可以借助扩展方法予以简化。 阅读全文

c# 扩展方法奇思妙用滥用篇一:改进 2011 年最佳代码

2011-08-08 18:39 by 鹤冲天, 9552 阅读, 收藏, 编辑
摘要:使用 OrNot 扩展方法性改进 2011 年最佳代码:if (whatEver(you.Believe)(it).OrNot()) I.Believe(it); 阅读全文

保护眼睛:给 PDF 设置图片背景

2011-08-04 22:05 by 鹤冲天, 15787 阅读, 收藏, 编辑
摘要:从事 IT 行业,免不了经常阅读 PDF 文档。 PDF 文档纯白色背景相当刺眼,长时间阅读会导致眼睛干涩疼痛。一些 PDF 阅读软件可以修改背景,但往往只能使用纯色(单一颜色)。 PDF 文档使用淡雅的图片作背景,可减缓视觉疲劳,保护我们的眼睛。 阅读全文

这种写法用过没:string.Format("{0,-10}", 8)

2011-08-03 18:46 by 鹤冲天, 7587 阅读, 收藏, 编辑
摘要:做 .net 开发也若干年了,如此写法确是我第一次见(更别提用了):string.Format("4G 内存便宜了{0,12:C2},我打算买{1,4}条", 145, 2); 阅读全文

快速创建 IEqualityComparer<T> 和 IComparer<T> 的实例

2011-08-02 21:14 by 鹤冲天, 9502 阅读, 收藏, 编辑
摘要:.net 中 IEqualityComparer 和 IComparer 经常在 Linq 和 一些泛型集合、泛型字典类中用作参数。不过因其复杂性,包含 IEqualityComparer 或 IComparer 类型参数的函数一般使用频度不高。 尽管如此,有些情况下确非用不可,不得不创建一些新的类来实现 IEqualityComparer 或 IComparer 接口。不但增加了代码量,还对程序结构产生影响,新加入的类命名、放置、共用都是问题。 因此,我们期望能简单快速直接的创建 IEqualityComparer 和 IComparer 的实例。 阅读全文

何止 Linq 的 Distinct 不给力

2011-08-02 18:45 by 鹤冲天, 8135 阅读, 收藏, 编辑
摘要:昨日有文《Linq的Distinct太不给力了》,本文更深一步讨论。 .net 中经常把 IEqualityComparer 用作某些重载的参数。 虽然这些重载在日常使用中并不频繁, 不过一旦用到,大多要创建新类实现 IEqualityComparer,繁琐不给力。 本文创建 Equality 泛型类,配合一个 lambda 表达式可快速创建 IEqualityComparer 的实例。 阅读全文

c# 扩展方法奇思妙用基础篇八:Distinct 扩展

2011-08-01 20:57 by 鹤冲天, 20111 阅读, 收藏, 编辑
摘要:刚看了篇文章 《Linq的Distinct太不给力了》,文中解决办法,略显复杂。使用本文的扩展方法可写成如下优雅的方式:var p1 = products.Distinct(p => p.ID) 阅读全文

使用 ADO.NET 开发 数据库无关 的 应用程序

2011-07-20 22:06 by 鹤冲天, 3627 阅读, 收藏, 编辑
摘要:开发数据库无关的应用程序有很多种方式,本文介绍最基础的一种... 阅读全文

.NET 求和的效率

2011-07-14 13:32 by 鹤冲天, 3885 阅读, 收藏, 编辑
摘要:对 .NET 中各种求和的方式进行效率比较... 对一般开发影响不太,对效率要求不高的朋友可无视本文... 阅读全文

.NET 4:并行求和不爽

2011-07-13 20:02 by 鹤冲天, 5394 阅读, 收藏, 编辑
摘要:如题,使用 .NET 4 中的并行求和,效率不理想。文中给出一简单的并行求和方法... 阅读全文

当 dynamic 遇上 internal

2011-06-29 07:53 by 鹤冲天, 2932 阅读, 收藏, 编辑
摘要:dynamic 免去了反射调用的繁琐和不雅,带来了极大便利。但面对其他程序集中的 internal 类型时 dynamic 表现又如何呢... 阅读全文

借助 委托 精简代码

2011-06-23 20:47 by 鹤冲天, 5790 阅读, 收藏, 编辑
摘要:相信大多朋友和我一样,每天写代码就会用到 String.Format 这个方法。太经常用,感觉敲起键盘了不是太利索,于是把它精简成一个字母 F,以后代码可以这样写了:var s = F("今天是 {0}", DateTime.Now)。 阅读全文

借助 Clay 编写 不可思议 的 c# 代码

2011-02-22 21:42 by 鹤冲天, 17954 阅读, 收藏, 编辑
摘要:如题,借助于 Clay 项目,我们可以编写出不可思议的 c# 代码,各种方式的对象初始化和属性赋值,简单动态创建集合,动态接口实现...本文将会令你大为惊叹:原来c#也可以这样写!! 阅读全文

c# 扩展方法奇思妙用基础篇七:IsBetween 通用扩展

2011-02-18 21:09 by 鹤冲天, 5906 阅读, 收藏, 编辑
摘要:写个扩展容易,但写一个通用的扩展可不简单,试看本文借如何优雅的完成通用的 IsBetween 扩展... 阅读全文

c# 扩展方法奇思妙用基础篇 六:WhereIf 扩展

2011-02-17 19:24 by 鹤冲天, 13056 阅读, 收藏, 编辑
摘要:创建并使用 WhereIf 扩展方法简化代码... 阅读全文

c# 扩展方法奇思妙用 ASP.NET MVC 篇:巧用扩展方法优先级,美化所有页面 TextBoxFor 文本框

2010-04-17 21:12 by 鹤冲天, 12535 阅读, 收藏, 编辑
摘要:巧妙使用扩展方法的优先级,美化你网站(ASP.NET MVC)页面的TextBoxFor文本框;配合js脚本,还能限制用户录入。而且你甚至不需要修改任何一个前台页面... 阅读全文

《NHibernate One Session Per Request 简单实现》勘误

2010-02-02 22:08 by 鹤冲天, 4894 阅读, 收藏, 编辑
摘要:使用 NHibernate 进行 Web 开发的朋友大多都知道 Session-Per-Request 模式,但网上真正能够正确使用的例子不多,网上包括园子里好多文章犯了同一个错误,而这个错误确一直在散播... 阅读全文

构建 WinForm 通用速选(全选、反选、清空)组件

2009-11-29 22:48 by 鹤冲天, 6437 阅读, 收藏, 编辑
摘要:用户界面中,需要用户进行多项选择时,我们通常会提供一组快速选择按钮:全选、反选、清空,以方便用户操作。本文章将会构建一个通用速选组件来简化操作,使用之后,您不需要编写任何代码,只需设置两个属性便可让一个控件拥有速选的功能... 阅读全文

c#操作Office 警告:方法和非方法之间存在二义性

2009-11-13 22:17 by 鹤冲天, 4771 阅读, 收藏, 编辑
摘要:最近做Office方面的开发工作,操作Word时发出一处二义性的警告... 阅读全文

一个 有歧义 的 lambda 表达式

2009-11-11 21:22 by 鹤冲天, 2513 阅读, 收藏, 编辑
摘要:今天发现了一句有歧义的labmbda表达式,发出来供大家“把玩”... 阅读全文

c#扩展方法奇思妙用高级篇七:“树”通用遍历器

2009-11-09 22:06 by 鹤冲天, 6656 阅读, 收藏, 编辑
摘要:“树”的遍历是一个通用算法,本文给出“树”遍历的通用扩展方法... 阅读全文

c# 扩展方法奇思妙用高级篇六:WinForm 控件选择器

2009-11-08 21:17 by 鹤冲天, 8830 阅读, 收藏, 编辑
摘要:在Web开发中,jQuery提供了功能异常强大的$选择器来帮助我们获取页面上的对象。但在WinForm中,.Net似乎没有这样一个使用起来比较方便的选择器。好在我们有扩展方法,可以很方便的打造一个。 阅读全文

.Net 相等性:集合类 Contains 方法 深入详解

2009-09-05 17:39 by 鹤冲天, 10908 阅读, 收藏, 编辑
摘要:.Net中表式相等的方法很多,和相等的接口也很多... 而.Net中的集合类普遍都有Contains方法,Contains与这些相等方法、相等接口之间关系如何呢?本文将.Net掘地三尺,一步步分析,篇幅较长,请耐心品味... 阅读全文

.Net 相等性的测试题目,看你基础牢不牢

2009-09-04 20:01 by 鹤冲天, 3563 阅读, 收藏, 编辑
摘要:非常基础的.Net试题,确很难回答。高手也未必能回答正确... 阅读全文

反驳 老赵 之 “伪”递归

2009-08-31 21:34 by 鹤冲天, 4771 阅读, 收藏, 编辑
摘要:今天看了老赵的随笔《使用Lambda表达式编写递归函数》,老赵给其中两行代码下了“伪递归”的定论,我非常不满,今写文反驳之... 阅读全文

c# 扩展方法奇思妙用高级篇四:对扩展进行分组管理

2009-08-29 23:49 by 鹤冲天, 5789 阅读, 收藏, 编辑
摘要:从系列文章开篇到现在,已经实现的很多扩展了,但过多的扩展会给我们带来很多麻烦... 本文给出了三种解决方法... 阅读全文

瑞士军刀 VS 单一职责原则

2009-08-28 19:07 by 鹤冲天, 3487 阅读, 收藏, 编辑
摘要:“单一职责原则”是面向对象软件开发的基本原则之一,面向对象的思想又是从现实世界中总结出来。可最近发现面向对象的单一职责原则与现实好似有些冲突... 阅读全文

c# 扩展方法奇思妙用变态篇四:string 的翻身革命

2009-08-26 20:27 by 鹤冲天, 8030 阅读, 收藏, 编辑
摘要:string是各种编程语言中最基础的数据类型,长期以来受尽其它类的压迫... 而现在string要“翻身闹革命”了,它几乎无所不能,可以为所欲为,令其它类心惊胆颤... 阅读全文

c# 扩展方法奇思妙用基础篇三:byte 常用扩展

2009-08-22 21:11 by 鹤冲天, 8472 阅读, 收藏, 编辑
摘要:byte 常用的八种扩展 阅读全文

c#扩展方法奇思妙用变态篇三:switch/case组扩展

2009-08-18 20:32 by 鹤冲天, 12344 阅读, 收藏, 编辑
摘要:变态篇二中给出了对if/else、swith/case及while 的扩展,其中举了一个Swith扩展的应用... 今天突然有了新想法,对Switch扩展进行了改进。所谓“语不惊人死不休”,且看这次的改进如何... 阅读全文

c# 扩展方法奇思妙用高级篇三:Enumerable.Cast<T> 应用

2009-08-17 21:10 by 鹤冲天, 16097 阅读, 收藏, 编辑
摘要:Enumerable.Cast用于将IEnumerable转换为泛型版本IEnumerable。转换后可尽情享用Enumerable的其它方法... 但MSDN中仅给出一个转换ArrayList的例子,很多人看了感觉用处不多,其实不然... 阅读全文

c# 扩展方法奇思妙用性能篇一:扩展方法性能初测

2009-08-15 20:15 by 鹤冲天, 9490 阅读, 收藏, 编辑
摘要:最近写了几篇《c#扩展方法奇思妙用》的文章,一直只是讨论如何扩展、如何使用的问题,几乎没有涉及效率方面。而大家的回复好多都在问效率如何、性能怎样,也引起了我对效率的关注,今天将初步测试的结果发出来,大家一起探讨一下。 这次测试的结果令我倍感意外,确实没想到扩展方法的效率如此之高... 阅读全文

c# 扩展方法奇思妙用变态篇二:封装 if/else、swith/case 及 while

2009-08-13 18:13 by 鹤冲天, 15012 阅读, 收藏, 编辑
摘要:本文探讨如何使用扩展方法封装 if/else、swith/case及while,通过使用这些扩展,写出的代码将使用很少的大括号{ }... 阅读全文

c# 扩展方法奇思妙用高级篇二:Aggregate 扩展及其改进

2009-08-12 20:07 by 鹤冲天, 18614 阅读, 收藏, 编辑
摘要:Enumerable.Aggregate 扩展方法在System.Linq命名空间中... 本文介绍使用Aggregate进行求和、byte数组异或、字符串拼装/逆序输出。并对Aggregate进行改进,实现间隔求和,进一步改进查重极限算法。 阅读全文

c# 扩展方法奇思妙用变态篇一:由 Fibonacci 数列引出 “委托扩展” 及 “递推递归委托”

2009-08-10 09:06 by 鹤冲天, 6299 阅读, 收藏, 编辑
摘要:public static IEnumerable GetSequence(this Func func, int count)... 相信大家见的扩展大多针对类(object, string)、接口(IEnumerable)进行扩展,针对Func(委托)估计对大多数人来说都是第一次。 public static Func Fibonacci = n => Fibonacci(n - 1) + Fibonacci(n - 2);... 与数学通项式对比一下,何其相似!这就是我们的“递推递归委托”! 阅读全文

使用“初中知识”实现查找重复最优算法 + 最终极限算法

2009-08-08 16:39 by 鹤冲天, 2398 阅读, 收藏, 编辑
摘要:初中知识解决以下问题: 1-n放在含有n+1个元素的数组中,只有唯一的一个元素值重复,其它均只出现一次。每个数组元素只能访问一次,设计一个算法,将它找出来;不用辅助存储空间,能否设计一个算法实现?(n可能为奇数) 文章最后还给出了一个极限算法! 阅读全文

c# 扩展方法奇思妙用高级篇一:改进 Scottgu 的 "In" 扩展

2009-08-08 10:49 by 鹤冲天, 4748 阅读, 收藏, 编辑
摘要:很多介绍扩展方法的也大都使用"In"作为例子,但很少有人再深入想一步。个人感觉这个In扩展的不够彻底... 使用 params 和 泛型改进了 ScottGu 的 In 扩展,使用调用代码更加简洁,同时也能减少编程中的误输入。 阅读全文

c# 扩展方法奇思妙用

2009-08-07 17:45 by 鹤冲天, 55836 阅读, 收藏, 编辑
摘要:<img src="http://www.cnblogs.com/images/cnblogs_com/ldp615/extensions.jpg" class="desc_img"/> c#扩展方法出来已久,介绍的文章也很多,但都是笼统的。 本人最近一直在思考扩展方法的应用,也悟出了一些。 将这最近一段时间对扩展的思考,写成一个系列文章。 每个文章只介绍一个应用方面,篇幅不会太长。 打算将文章写成三个部分:基础篇、高级篇、变态篇。 阅读全文

c# 扩展方法奇思妙用基础篇一:中文处理

2009-08-07 17:20 by 鹤冲天, 19308 阅读, 收藏, 编辑
摘要:我们在做程序的的时候经常要处理用户输入,作为我们的主要语言中文,经常会出现全角、半角的问题,这会在查询时给我们带来很多麻烦。 本文采用扩展方法解决全半角切换的问题... 阅读全文

c# 链式编程

2009-08-07 14:49 by 鹤冲天, 8052 阅读, 收藏, 编辑
摘要:c#链式编程,使用链式编程精炼代码。采用泛型扩展方法来对已由代码链式编程。 阅读全文

超精简C#程序代码改进-利用扩展方法简化代码增强可读性

2009-08-06 22:17 by 鹤冲天, 2825 阅读, 收藏, 编辑
摘要:今天在园子里面发现一篇文章超精简C#程序代码,看了之后很是震撼,花了好长时间基本看明白了。随后又有了一些新的想法。 最近一直在思考扩展方法的应用,与这篇文章中的想法一接合,可将代码进一步精简,并可增强可读性。 代码仅用了三个分号... 阅读全文