随笔 - 106
文章 - 2
评论 - 2017
阅读 -
43万
随笔分类 - .NET基础
最优雅的二分查找
摘要:今天复习以前的代码,突然发现插入排序用的二分查找算法实现得很别扭,于是试试重写一个,没想到相当顺利,几分钟就写好并测试通过了:static int BinarySearch(int[] array, int value, int start, int end) { if(start == e...
阅读全文
我的设计模式总结
摘要:各位小牛大牛老鸟菜鸟们好,欢迎参观我的设计模式世界。这个世界我已经总结多年了,现在才刚刚成型。But I have a dream,梦想所有开发者都能一夜之间认清所有设计模式,还幻想以后大家认识设计模式时,必首先google本文,嘿嘿。前辈同仁们已经总结过很多,至今首页上设计模式的文章仍然层出不穷。...
阅读全文
弄清UTF8和Unicode
摘要:长期以来,一直对字符串编码认识比较粗略,认为支持"特殊字符"编码就是Unicode。当然,.NET平台上很少需要考虑这类问题,但搞清一些基本概念还是很有好处的。Unicode这个词,首先是国际标准的通用字符集(UCS)名称,囊括了汉语八国联军火星文等各种文字。这是一个面向用户的字符编码标准。其他的编码标准如GB2132,BIG5什么的都是Unicode标准之前的老黄历了,彼此间,与现代系统间各种不兼容。而.Net中的UnicodeEncoding类,是实现Unicode字符集的一种编码方式,将一个字符转换成字节形式。其名称容易引起qi义,其实这个编码方式通用名称(在其他编程
阅读全文
准备从头复习算法
摘要:半年多没更新了,太懒了。工作上业务逻辑真是无穷无尽,变更无休无止,还是回来,哪怕随便写点也好。今天就是个微不足道的东西,不过也有点可以深入思考的东西。快速排序一般都是递归实现,我一直以为递归性能上差一点,但可读性。但我前几天试写了一个不用递归的快速排序,发现反而不如递归的版本快: static v...
阅读全文
最简洁的快速排序算法(C#实现)
摘要:这几天事情不多,回顾一下排序算法。过去虽然也练习过,可现在发现,要重写一遍,不是IndexOutOfRange就是StackOverFlow,反正基本得不到正确结果。让偶情何以堪? 这些简单的排序算法程序应该不需要什么编程功底,写不对的真正原因,还是没有理解算法。以前写的算法代码,一看就不像出...
阅读全文
林子大了,什么鸟都有----.NET运用String的十八层境界
摘要:在上一文中,提到了一句相当常见但十分荒谬的代码:Request.QueryString["id"].ToString()。突然涌起一个想法,为什么不总结一下不同层次.Net开发者如何运用string的呢? 古往今来,文本处理一直是所有编程语言的最基础的功能,也是最核心最重要的功能。任何初学者,如果想学一门编程语言,都要面对大量的文本处理。而或许有一天,即使你成了大师级的人物,也不敢说自己驾驭文本处理的能力,就已登峰造极。对String理解和运用,应该可以很好地代表开发者的专业水平。 写Request.QueryString["id"].ToString(
阅读全文
漫谈.Net中对象相等
摘要:.Net中对象之间的相等比较,是看似简单,实际上有点儿复杂。这和现实世界的情况差不多,无论人或物,现实中没有两个绝对相等,只有相对的属性一致或同属某个类别,这学问细究下去无穷无尽,一辈子也未必参得透。而.Net中的相等,没有那么捉摸不透,却也值得品味一番。 说到相等,新手上来,先学到的就是相等操作符==(有的.Net语言中是单=),这个很自然,问题是有不少人工作了一两年,提到相等还是只想到操作符,就太片面了。 在这里,茴香豆的茴字有四种写法,.Net中也主要有四种相等比较,分别是:==操作符、Object.Equals方法、Object.ReferenceEquals方法、对象实例的E...
阅读全文
再议.Net中null的使用规范
摘要:在上一文中,论述两个.Net Framework对null应用不够合理的例子。大家评论中,给出了不少指导性意见,这里也对.Net中null的使用规范作一下总结。1. Empty代表瓶子是空的,null代表瓶子都没有 首先要明确你的“瓶子”是什么,也就是你代码的逻辑是建立在什么基础或前提之上。如果这个前提不存在,是否为正常的,或是可接受的情况。如果是,则应该允许返回null。 例如ConfigurationElement,既然允许某个节点属性未定义,自然应该允许null。如果前提因为意外(罕见的情况)未实现,则应该抛出异常,交给上一级堆栈进行处理。相应的,Linq中的FirstOrDef...
阅读全文
.Net令人纠结的Null
摘要:从我们刚学.Net编程起,我们的程序不断被从天而降NullReferenceException打断。直到今天,我们仍然时常为C#的Null或者VB的Nothing困惑。什么情况下我们该返回null,如果参数是null代表什么。许多类型,有两种不同意义的空状态,一种是null,一种是其本身或其某个属性集合中没有元素,这就更容易产生误用。常听有人说,Null这个概念在编程语言中根本不应该存在。但是,从C++到Java到.Net,它从未离开过。最近,注意到.Net Framework在读取程序配置文件的一个小Bug。比如我在配置文件中,自定义了名为ReviewPeriod的节点:<config
阅读全文
最简单的重构,你会吗
摘要:最近玩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...
阅读全文
高效地字符串替换
摘要:这里指的不是String类里的Replace方法。如果不知道被替换字符串的内容,而只知道其位置和长度的话,就可以用StringBuilder轻松高效完成替换。 public struct ReplaceText { /// /// Start position /// public int Start { get; set;} /// /// The length of text to be replaced /// public int Length { ...
阅读全文
[English Practise]Asp.Net and IIS
摘要: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
阅读全文
性能相差7千倍的ToString方法
摘要:ToString方法大概是.Net时被用得最多的方法了,所有类型都,引用的,值的,都传承了这个从祖先Object开始的光荣传统。调用一次ToString,相当于惊堂木“啪”一下,大喝“堂下案犯报上名来”,这家伙就全招了。 可是写程序如查案,形形色色的人都有,对于些记性差,反应迟钝的家伙,就没那么顺利了。梅(枚)举人就是其中之一,来审问下看看: static void testEnumToString() { var day = DayOfWeek.Wednesday; string value = null; ...
阅读全文
.Net 4.0并行库实用性演练(前言)
摘要:自VS2010发布近半年了,虽然整天想学习新东西,要更新到自己时,发现原来自己基本也很懒,2008还没用上多久呢,无奈被2010了。用了几天,IDE模样还是和05、08差不多,加了些小特性,以后慢慢体验吧,第一感觉启动速度慢多了。主要还是.Net 4.0的变化,其实也就是修修补补,语言特性几乎没什么新特性,C#多了个Dynamic,十年前VB就支持的晚绑定。只好把注意力放在了Framework上,新加的并行支持应该是最大的变化吧。 VS2010发布会我也去过的,并行支持是一大卖点。当时记得台上一个MM对一个Linq查询语句加了个AsParallel(),性能就神奇地提高了一倍,台下掌声雷...
阅读全文
接口反射委托设计模式,水到渠成
摘要:博客园上常关注的两个博客,老吉写了篇不懂接口、反射、委托、设计模式足足写了5年的代码,还有白话反射,老赵写了篇谈白话反射。 自己也有些感想,接口反射这些东西,无论哪个编程语言里都属于《xxx高级编程》之类书里靠后的章节。能将这些东西灵活自如又不过分的运用,自然属于程序高手的行列。 我也是大学C语言课学了一点编程语法,然后自学开始进入程序员工作的。刚开始,我就从来没觉得这些东西会有什么难度,一切应该水到渠成,船到桥头自然直。交通拥挤时人们想到立体发展;阶级分化导致社会不安定时人们想到创建国家。随着事物发展到一定程度,新的事物便会应运而生。程序语言也不例外,从机器码到高级语言,从过程到对象,...
阅读全文
我看Asp.Net控件(三)
摘要:如前两篇所述,我用控件和原则是方便与性能兼顾。如果webcontrol能够提供一些简便则用,否则尽量使用htmlcontrol。下面对常用控件作个总结:1. 最常用的:Literal、Repeater2. 经常用的: Button、LinkButton、Panel、PlaceHolder、DataList3. 偶尔用的: Label、Substitution、ImageButton、ImageMap、AdRotator、XmlDataSource、导航类控件、验证类控件4. 很少用的:Xml、Wizard、MultiView、View、ListBox、BulletList、CheckBoxLi
阅读全文
我看Asp.Net控件(二)
摘要:接下来说数据类控件。GridView: 这个控件恐怕无人不知,至今还时常看到一些关于GridView的新文章。刚学web开发时老师说这是最让asp.net自豪的控件。呵呵,可能对于PHP和JSP开发人员说,初见GridView的完美功能,恐怕会惊为天人之作,集成了增删改排序分页,还能要求什么?不过说完美要看对谁,反正偶是很久以前就再没在正式项目里用过。DataList:和GridView一样生成<table>标签,不过一行可以放N个数据行,就为这点方便性,所以在一些展示页面中常有用武之地。DetailsView: 除非一个数据行或实体类实例有几百个属性,多得你受不了,又不会用反射,
阅读全文
我看Asp.Net控件
摘要:总结一下我的认识,可能观点和多数人不太一样。MS东西特点是赘肉多,asp.net也是。Label: 在生成的页面里相当于<span>,Text属性如果是标签的话会被转义成文本。有时候想贴点源代码,能省点事儿。TextBox:一点多的东西也没有( textchanged事件有人用吗?) 今年以来一直用加了runat的<input>。有时label和textbox随表单回发字体颜色要改变,用直接属性比Style集合爽一点。Button:因为有onclientclick属性,时常会用。aspx页面里有一个button和两个button效果不一样,需要注意。LinkButton
阅读全文