随笔分类 - C#
摘要:在msdn 上看到的文章 Quick Puzzle: what does this program print? 你知道这段代码的输出吗? class Hello { Type Unknown { get { return World.GetType(); } } object[] Knowledge() { return Unknown.GetProperties(); } string[] Library() { return Array.ConvertAll<object, string>( ...
阅读全文
摘要:前段时间,有个同事说 “30000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000...
阅读全文
摘要:在这周的一次讨论中,有人说(a+(b+c)) 等于 ((a+b)+c) ,当a, b,c 全部都是简单数据类型,例如int,float,double ...在数学上当然如此,但是在代码上却并非如此,首先考虑下System.Int32 以及下面的test.cs:using System;class Program{ static void Main(string[] args) { int a = int.MaxValue; int b = 1; int c = -a; try { Console.WriteLine(a+(b+...
阅读全文
摘要:问题描述:找出Framework 4.0 新增的方法和新增的类(上) 为什么动态加载程序集无法找出Framework 4.0 和Framwork2.0 新增的方法和类? 因为控制台程序默认就添加了Framework4.0的程序集,当你使用Object,Type,string这些类的时候就已经在使用已经加载的程序集了,而clr不会重复的去加载程序集??,这点记不清了。 所以V2Assembly 和v4Assembly都是Framework4.0的Assembly。 验证: static void Main(string[] args){ ...
阅读全文
摘要:经常看到有同学在讨论Framework 4 的新特性,新方法,于是想写个程序找出framework4.0中新增的方法和类。程序思路:动态加载V4和V2的mscorlib.dll程序集,通过反射进行比较。之所以加载mscorlib.dll 是因为framework中的大部分类都在这里,而发生变更的也就是这里最多。第一步:新建控制台程序:加载程序集: 加载程序集完成后,自然要获取程序集中的所有Type,这里直接使用默认的GetTypes方法。 获取了v4Types 和v2Types之后,就要对v2Types里面的所有Type于v4Types里面的所有Type进行比较,而比较的内容就是GetMemb
阅读全文
摘要:前阵子在CodeProject上看到了一篇文章:MBG Extensions Library 大致是作者在介绍自己写的扩展方法类库,内容如下: In() if (myString == "val1" || myString == "val2" || myString == "val3" || myString == "val4" || myString == "val5...
阅读全文
摘要:有很多书上都提出过一个建议:不要返回null对象。 比如下面的GetUsers方法: public class User { public string Id { get; set; } public string Name { get; set; } } public List<User> GetUsers() { List<User> result = new List<User>(); // search db for ...
阅读全文
摘要:一直以来,网易的视频我都经常看,尤其是网易公开课 ,但是看网易视频有一个不爽的地方,也许是我太挑剔了,不过这的确让我不爽。 例如打开链接http://v.163.com/video/2011/9/V/G/V7DUUDJVG.html 在视频播放的时候我点击了“暂停”,标题变成了现在这个样子,点击“评论”也会如此 前阵子在开发Silverlight的程序的时候,也碰到了上面的标题问题。下面我将慢慢的道来: 新建Silverlight 4应用程序项目:SLNavigationDemo 增加两个页面Page1.xaml,Page2....
阅读全文
摘要:面向过程: 假设有两个类Square(正方形),Rectangle(长方形) 。代码如下: 如果有一个类Geometry需要计算图形的面积: 假设现在要添加一个Circle(圆形),并且同样需要计算Circle的面积。那么需要做哪些修改: 1:需要添加Circle类,代码如下: 2:因为需要计算Circle的面积,所以Geometry类需要修改 可以看到增加了sharp is Circle 的判断。 假设现在Geometry类不仅仅需要计算面积,还需要计算sharp的周长。 那么Geometry...
阅读全文
摘要:别给糟糕的代码加注释-----------------重新写吧 这是书中的关于注释一章的第一句话,怎么说呢,这句话个人感觉很对,但是实际上却很少这么做, 有几个原因: 糟糕的代码不是自己写的,别人写的代码,还是让别人自己去维护吧,出了问题也是别人的。 糟糕的代码目前可以正常工作,软件开发中有一条古老哲言:如果它能工作就不要动它,很多程序员都遵守这条准则。 既然代码不能被修改,那么就只能加注释了。 上面的几个原因纯粹是自己的想法,希望你不要和我一样。 注释的好处基本上大家都知道,主要是为了方便其他人更好的查看和理解代码,下面的一...
阅读全文
摘要:短小: 函数的第一规则是短小,第二规则还是短小, 很明显作者将短小放到第一个列出来的位置。说明对于函数而言,短小的重要性不言而喻。 可是函数多少行才算短小呢? 代码大全上说一个函数理论上应该小于50行,我认为这个数字有点大了,我比较同意Bob的看法,”20行左右的代码为佳” 代码块和缩进: 代码块和缩进的规则很多,不过有很多格式化工具可以为我们做这种事情, 比如在vs2010中,就可以ctrl+ A(全选) ,Ctrl+K+F(格式化) 只做一件事: 函数应该只做一件事,做好这件事,只做一件事。 基本上这点大家都知道,如果一个函数做了多个事就代表有多...
阅读全文
摘要:最近在看Clean-Code(代码整洁之道) 里面有些内容还是不错的,所以给大家分享下。 名副其实: 意思是说名称和意思要一致,更精确的说应该是看到名字就能想到意思。 对程序员来说取名通常是一件麻烦的事情,尤其是取一个好的名字。 这里截取一段书中的代码: public List<int[]> GetThem(){ List<int[]> list1 = new List<int[]>(); for(int[] x in theList) { if(x[0]==4) list1.Add(x); } r...
阅读全文
摘要:在CodeProject上面看到一片文章: Hall of shame 觉得挺有意思的,以下是糟糕的代码合集,请大家慢慢品尝。 1:那是一片丛林 我正在重构一个写的很可怕的程序,以吨来计算的重复代码,大量无效的代码(30%-50%),然而我最个人最”钟爱”的是下面的这个方法:public void Some_Method(){ try { } catch (Exception x) { LogException(x); }}不管是幸运还是不幸,这个方法从来就没被调用过,但是我非常高兴看到catch语句。。万一空的try抛了异常那该怎么办呢?2:if not null, return value
阅读全文
摘要:首先要说明的是连接数是有限制的: 代码如下: 运行结果如下: 过一会就会提示打开连接超时了: 可以看到数据库连接时有限制的,如果连接不关闭,而且使用的人比较多,那么系统很快就down掉了。 但是有时候由于某些原因应用程序可能只是几个人使用,所以就有人设计了:在应用程序启动的时候打开数据库连接,在应用程序关闭的时候关闭数据库连接那么使用这种方式有什么问题呢?首先假设有一张表Nums,表定义如下:...
阅读全文
摘要:首先为假设有一个应用程序CAStudy,接着右键添加一个资源文件Resource1.resx。 Resource1.resx里面如下: Main函数如下: static void Main(){ ResourceManager resourceManager = new ResourceManager( "CAStudy.Resource1", Assembly.GetExecutingAssembly()); Console.WriteLine("String1 : " + resourceManager.GetString("String1
阅读全文
摘要:假设我们有一个类:Product public class Product{ public string Id { get; set; } public string Name { get; set; }}Main函数如下:static void Main(){ List<Product> products = new List<Product>() { new Product(){ Id="1", Name="n1"}, new Product(){ Id="1", Name="n2"},
阅读全文
摘要:装配脑袋的习题在这里:Expression Tree上手指南 (一) 不了解Expression Tree的同学可以去看下,很好,很强大。1: -a2: a + b * 2我把这些问题都弄成了方法,分别是Question1,Question2,….QuestionX第一题:-a因为实在是太短了,我不明白是什么意思,姑且认为是做取反操作吧,也就是假如输入是5,那么输出是-5.如果让你写lambda表达式,估计没几个人写不出来吧:(a)=>{return –a;}当然你可以简短点:(a)=>{-a}OK,看一看lambda表达式:(a)=>{return –a;},可以知道有一个
阅读全文
摘要:原理:使用Popup控件,并且设置Popup控件的位置居中。1:新建自定义控件PopupBorder,作为Popup的child。代码如下:<UserControl x:Class="SLStudy.PopupBorder" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.micr
阅读全文
摘要:首先假设你的应用程序配置文件如下: <?xml version="1.0" encoding="utf-8" ?> <configuration> <appSettings> <add key="name" value="old"/> </appSettings> </configuration> Ok,那么如何在运行时去修改name的值呢?? 有很多童鞋会说可以使用Xml读取配置文件,然...
阅读全文
摘要:One: int i = 0; switch (i) { case 0: Console.WriteLine("0"); case 1: Console.WriteLine("1"); break; } //在这里,想让i==0的时候执行 //Console.WriteLine("0"),然后"fall through"到下层执行Case 1。 //但是在C#中是不允许"fall through" 的。除非“case 0”一行语句都没有。 但是可以使用goto 语句来实现”fall t
阅读全文