Gear.Turbo

2011年8月29日 #

解析命令行的正则表达式

摘要: 问题最近在做一个控制台的程序,程序提供给用户几个命令。每个命令都可以接受多个参数,参数可以有值也可以没值。另外,如若参数中有空格则可用双引号(“”)把参数括起来以表示是一个整体。一些简单的命令例子如下:regularCommand argument /a: value /b: value2 /argument: value3 regularCommand argument /a: value /b: value2 /argument: value3 /argumentWithouValue regularCommand /a:value /b:value2 anotherArgu... 阅读全文

posted @ 2011-08-29 11:12 lsp 阅读(2634) 评论(0) 推荐(0) 编辑

2011年8月28日 #

你是如何让函数返回IEnumerable<T>的

摘要: 为什么让接口返回IEnumerable<T>关于这个问题不需要过多的解释,且不是本文讨论的重点。简单来说,遵循接口最小原则,返回用户最少的行为即可。因此,能返回IEnumerable<T>则不返回List<T>或Collection<T>。接口的实现函数如何返回IEnumerable<T>一个最简单的方法,也是程序代码中经常见同事的做法是在函数中创建一个List<T>,然后对其进行赋值,最后作为函数返回值来返回。这种做法完全正确,而且List<T>太好用了,以至于我们可以用它来解决大部分问题,一个简单而典型的例 阅读全文

posted @ 2011-08-28 19:54 lsp 阅读(2268) 评论(2) 推荐(2) 编辑

2011年6月24日 #

对C#和C++0x中Lamda表达式的简略对比

摘要: Lambda表达式起源于函数式编程语言,后来逐渐被面向对象的编程语言所采纳。本文所讨论的不是Lamda表达式的使用方法,而是通过对比Lamda表达式在C#和C++0x中的不同实现而找出其中的区别。C#中Lamda表达式基本的语法结构是()=>{}; 其中()是参数列表部分,用来定义函数的输入参数。定义参数时,用户并不需要定义参数的类型,编译器会根据函数体来“推演”参数的类型。=>部分读作goes to, 意思是函数有如下的函数体。{}部分便是函数的主体部分。一个求2个整数和的例子如下:(a, b) => a + b;当函数体只有一条语句的时候,{}符号和return关键字可以 阅读全文

posted @ 2011-06-24 00:15 lsp 阅读(824) 评论(0) 推荐(0) 编辑

2010年1月30日 #

对C++和C#中多态及类型转换的理解(二)

摘要: 上一篇主要讲述了C++中的类型转换,本篇讲述的是C#中的类型转换。 不同于复杂的C++,C#语言相对简单,其类型转换规则也比较少,主要有两种:as运算符类型转换和cast运算符类型转换。as运算符的方式不会抛出异常,转换失败返回null值,这也决定了as运算符不能用在值类型上;cast则是强制类型转换,用户可以定义自己的隐式或显式类型转换符。cast运算符在转换失败时会抛出异常。因此基于转换安全... 阅读全文

posted @ 2010-01-30 23:33 lsp 阅读(528) 评论(0) 推荐(0) 编辑

2010年1月28日 #

对C++和C#中多态及类型转换的理解(一)

摘要: 多态是面向对象理论的一个重要概念,类型转换是程序开发中不可避免的行为,两者总是贯穿在我们程序开发中,对开发者来说并不陌生。然而,就是这么熟悉的内容,我还是犯过一些错误,因此有必要对其主要内容做一整理来加深理解。本文的重点是总结C++和C#中有关类型转换的一些基本原理,之所以提到多态是因为类型转换后多态函数的执行是比较容易被误解的一点。基于这些出发点,本文并不是一篇介绍多态的详细文章。希望本文能给对... 阅读全文

posted @ 2010-01-28 22:06 lsp 阅读(742) 评论(0) 推荐(0) 编辑

2010年1月26日 #

查看C#代码的低版本实现

摘要: 本文是介绍实用工具Reflector的一个小应用的:查看C#代码的低版本实现。 为什么要查看? 语言发展的越来越高级,越来越抽象,抽象的语言势必包装隐藏了一些细节。而有时却有必要查看细节是如何,比如lambada表达、LINQ表达式等是如何实现的?IL是一个选择,但我比较讨厌不管问题大小,动辄就拿IL说事的做法,其实大多数问题不必要看IL。另一个角度,比如说明书,假若有10万言的和300字的两个... 阅读全文

posted @ 2010-01-26 23:08 lsp 阅读(605) 评论(0) 推荐(0) 编辑

Closure中关于递归的一点补充

摘要: 在对Closure的再思考里面我提到了说网上有观点认为用lambda表达式声明的“递归”实际上并不是真正的递归。本文针对这个观点做专门的研究。 传统的递归 所谓传统的递归,是指一直来我们所经常使用的经典结构的递归。以n的阶乘来作为例子说吧,“传统”的递归结构可以用如下的代码表示: public static int FacRecursive(int n){ if (n <= 1) retu... 阅读全文

posted @ 2010-01-26 00:52 lsp 阅读(434) 评论(0) 推荐(0) 编辑

2010年1月24日 #

对Closure的再思考

摘要: 前些日子我对Closure做了初步的思考, 却总觉得意犹未尽,感觉Closure还没有进入到我心里去,还没有真正地、完全地理解。好吧,就把近日来杂乱的思考整理一下写出来吧。 为了便于理解,就让我从一些废话开始吧。众所周知,在C#中有两种类型——值类型和引用类型。就从引用类型谈起吧 。 引用类型的回顾 对于下面的代码: object obj = new object();object A = ... 阅读全文

posted @ 2010-01-24 22:30 lsp 阅读(312) 评论(0) 推荐(0) 编辑

2010年1月23日 #

Tools in Visual Studio 2010

摘要: 一直以来受到"工具只是工具"类似观点的影响,工具在我的思想中便不被重视。然而,在很多方面由对这个观点的错误理解造成了我对好多优秀工具的疏忽,从而多做了好多不必要的工作。当然,我并不是否认"工具只是工具"这个观点,毕竟其本意是指导我们不要看不见事物的本质。另一个方面,"工欲善其事,必先利其器"这个观点也是响当当的,是告诉我们好的工具是可以省去我们很多没必要的劳动的。话题回归到Visual Studi... 阅读全文

posted @ 2010-01-23 14:23 lsp 阅读(419) 评论(0) 推荐(0) 编辑

2010年1月18日 #

旋转的女郎

摘要: 本来在开心网上对这幅图做了一个解释的,昨天想翻出来,无奈无论如何也找不到了,于是有必要写下来记录一下了。网上流传的关于这副图的"功能"想必不再需要我赘述。总之流言很多,"耶鲁大学最新研究发现"的说法就更有损耶鲁大学的名声了,无非是此小游戏作者为了对其伟大的想法加上一定的"砝码"而杜撰的,然而是否属实也无法考证,在此我也只是推测。首先,让我们来澄清一下"顺时针"和"逆时针"的概念。这两个概念和"左"... 阅读全文

posted @ 2010-01-18 23:55 lsp 阅读(543) 评论(3) 推荐(0) 编辑

导航