2010年12月20日
摘要: 在上一文中,论述两个.Net Framework对null应用不够合理的例子。大家评论中,给出了不少指导性意见,这里也对.Net中null的使用规范作一下总结。1. Empty代表瓶子是空的,null代表瓶子都没有 首先要明确你的“瓶子”是什么,也就是你代码的逻辑是建立在什么基础或前提之上。如果这个前提不存在,是否为正常的,或是可接受的情况。如果是,则应该允许返回null。 例如ConfigurationElement,既然允许某个节点属性未定义,自然应该允许null。如果前提因为意外(罕见的情况)未实现,则应该抛出异常,交给上一级堆栈进行处理。相应的,Linq中的FirstOrDef... 阅读全文
posted @ 2010-12-20 11:36 小城故事 阅读(4060) 评论(11) 推荐(12) 编辑
  2010年12月15日
摘要: 从我们刚学.Net编程起,我们的程序不断被从天而降NullReferenceException打断。直到今天,我们仍然时常为C#的Null或者VB的Nothing困惑。什么情况下我们该返回null,如果参数是null代表什么。许多类型,有两种不同意义的空状态,一种是null,一种是其本身或其某个属性集合中没有元素,这就更容易产生误用。常听有人说,Null这个概念在编程语言中根本不应该存在。但是,从C++到Java到.Net,它从未离开过。最近,注意到.Net Framework在读取程序配置文件的一个小Bug。比如我在配置文件中,自定义了名为ReviewPeriod的节点:<config 阅读全文
posted @ 2010-12-15 14:41 小城故事 阅读(3929) 评论(32) 推荐(1) 编辑
  2010年12月14日
摘要: 偶不是计算机专业出身,不过参加过软考,对计算机原理大概也似乎多少有差不多那么个一星半点的了解。唯独看程序编译原理时,如读天书。状态机文法真奇妙,看了睡觉不用安眠药。大学出的书太垃圾了,打击了偶的自信,创伤了偶的幼小心灵。直到多年以后,看到老赵一篇《趣味编程:从字符串中提取信息》,心中的阴影才开始解开。 老赵提出的问题,逻辑算很简单的,用正则表达式,直接用关键字符拆分都行。但是如果字符串处理逻辑复杂一点,比如说,你要写个程序编译器,这时用正则或拆分方式,恐怕要哭了。只有请老赵文中提到的正解—状态机能大展身手了。 在本文,准备解析一个CSS文件。至于编译器,将来也不是不可能啊(菜鸟的白日梦... 阅读全文
posted @ 2010-12-14 14:37 小城故事 阅读(3436) 评论(13) 推荐(4) 编辑
  2010年12月13日
摘要: 最近涉及重构话题的文章不少啊,其实我也一直在憧憬重构,重构很绿色,重构很河蟹,重构令人很激动,重构可能让人死得很惨。我在这里,就列举一下Refactorman的种种死法,以警后人:一、一边重构,一边要完成日常任务……1. 疲于奔命,过劳而死。2. 吃领导给的鸭梨太大被噎死。3. 满脑子都是代码,在上班路上不留神撞上了宝马。4. 冷落了女友,受失恋打击跳楼而死。5. 无暇社交,不懂人情世故,失意而死。6. 为了说服领导和同事,心力交瘁而死。二、重构过程中……7. 被以前的混账代码气死。8. 被混账代码搞得大脑程序溢出,彻底崩溃,神智错乱而死。9. 终于醒悟,问题只是冰山一角,力有未逮,忧愤而死。 阅读全文
posted @ 2010-12-13 12:54 小城故事 阅读(20984) 评论(111) 推荐(66) 编辑
  2010年12月2日
摘要: 最近玩Reporting Service报表,微软官方客户端展现实现中有这么一段代码 protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { // Get report path from configuration file Uri serverurl = new Uri(ConfigurationManager.AppSettings["ReportServerUr... 阅读全文
posted @ 2010-12-02 10:22 小城故事 阅读(3516) 评论(39) 推荐(5) 编辑
  2010年11月21日
摘要: 正则表达式很强大,当然,也很复杂,我看到有本书专门讲这个,不过内容没看,没耐心。我看的是:《30分钟精通正则表达式》。 当然,讫今已经不知道看了多少个30分钟了,还是搞不懂一些基本问题,比如这个: var match = Regex.Match("0px", @"^0|\d+px$"; Console.WriteLine(match.Value); 结果输出0,为什么不是0px呢?如果将pattern倒过来"^\d+px\0$",就可以匹配0px。 如同.Net中的指针运用一样,掌握正则表达式好像还是一个高级的编程技能,有两三年经验的 阅读全文
posted @ 2010-11-21 21:34 小城故事 阅读(541) 评论(1) 推荐(0) 编辑
摘要: 这里指的不是String类里的Replace方法。如果不知道被替换字符串的内容,而只知道其位置和长度的话,就可以用StringBuilder轻松高效完成替换。 public struct ReplaceText { /// /// Start position /// public int Start { get; set;} /// /// The length of text to be replaced /// public int Length { ... 阅读全文
posted @ 2010-11-21 19:37 小城故事 阅读(920) 评论(1) 推荐(0) 编辑
  2010年11月10日
摘要: 园子还没提供这项功能,我们又确实有这个需求,只好自己写一个:var unlikes = ['zhang523012313', 'yangtongnet'];function delUnlike(filter, expr) { $(filter).filter(function() { var href = $(this).find(expr).attr('href'); for (var i = 0; i < unlikes.length; i++) { if (href.indexOf(unlikes[i]) > 0) return 阅读全文
posted @ 2010-11-10 12:19 小城故事 阅读(574) 评论(9) 推荐(3) 编辑
  2010年11月8日
摘要: 答案是:怀着积极的态度去做每一件事,以及把注意力放在你手头上现有的任务。假如,我们去展望一下这一辈子里等待我们去洗的堆积如山的锅碗瓢盆,或者那一堆堆需要熨烫的衣物……任何人想到这些估计都会瞬间崩溃心灰意冷,想想还不如去睡一觉呢……所以,仅仅去关注你今天要做的事情就可以了。昨天的事情都已经过去了,你已经进了你最大的努力,并且过去的也已经不能改变... 阅读全文
posted @ 2010-11-08 09:10 小城故事 阅读(244) 评论(1) 推荐(1) 编辑
  2010年11月4日
摘要: Asp.Net is an engine for web request handling, consisting of a series of compnents , such as HttpContext, HttpApplication etc. Under IIS 5 and 6, Asp.Net runtime is started and monitored by Asp.Net ISAPI extension, which registers Asp.Net resources(*.aspx, *.ashx … ) on IIS.Under IIS 5, web request 阅读全文
posted @ 2010-11-04 11:10 小城故事 阅读(312) 评论(0) 推荐(0) 编辑