摘要: 在c#中有个关键字叫ref,它的作用是使参数按引用传递,基本用法如下: 1 class RefExample 2 { 3 static void Method(ref int i) 4 { 5 i = 44; 6 } 7 static void Mai... 阅读全文
posted @ 2014-07-02 22:30 ILoveSleep 阅读(571) 评论(0) 推荐(0) 编辑
摘要: jQuery和Css的控件选择器用起来非常畅快,相信用过的人都会有这种感觉,而WinForm则是通过Name来实现窗体中控件的选择,在选择单个控件的时候是很方便,但是当选择具有一类特征的控件时,则显得有些乏力。于是我仿照jQuery和Css来实现了一个WInForm的控件选择器,而且是用扩展方法实现,这样只需要添加一个命名空间就可以方便的使用了。下面是实现的源码及一些简单的示例代码。 1 /// 2 /// WinForm控件选择器 3 /// 4 public static class Selector 5 { 6 //内部辅助函数,用于获... 阅读全文
posted @ 2013-09-03 19:58 ILoveSleep 阅读(1713) 评论(4) 推荐(1) 编辑
摘要: 枚举类型大家在平时程序中经常会用到,先看下面的列子1 enum Orientation2 {3 East,4 South,5 West,6 North7 }上面代码定义了一个方向的枚举类型,包括东、南、西、北四个值,这样似乎也没有问题,但是我们是中国人,有时候看中文会更加习惯一些,更重要的是在做数据显示的时候,利用Enum.GetNames方法也只能获得像“North”这样的英文,而得不到理想中的“北”。这种情况,尤其是在数据绑定的时候将十分的麻烦,还需要另外写代码将... 阅读全文
posted @ 2013-08-16 02:00 ILoveSleep 阅读(2370) 评论(8) 推荐(3) 编辑
摘要: Linq的链式编程用起来总是那样畅快淋漓,可惜在C#中并不是每时每刻都能有这么畅快的感觉,其中使用Graphics的时候就是,每次用Graphics绘制大量图形时尤其如此。GDI+的API功能很强大,但是在实际编码中,很多重复性的工作总是让我感觉到用起来很繁琐,于是我就设计了这样一个类库,将C#中的Graphics类进行了二次封装,让其可以和Linq一样,用起来“如沐春风”。先来看一段简单的示例代码吧。下面代码就是在一个窗体上绘制一系列图形,可以看出和原来的Graphics相比,编码量更小,代码也更优雅。 1 private void Form1_Paint(object sender, Pa 阅读全文
posted @ 2013-08-08 00:06 ILoveSleep 阅读(1477) 评论(15) 推荐(4) 编辑
摘要: 其实微软还是蛮有创造力的,一个配置文件居然弄了这么多的形式,从原来的ini到现在的xml,总而言之让我们这些在微软殿堂里的程序员翘着屁股追赶。微软最新的配置文件实际上就是个xml文件,以后缀名.config表示,但是在VS中默认只有一个配置文件,app.config或者web.config,有时我们想添加自己命名的配置文件却感觉很乏力,我这篇博客就是来介绍下如何让VS能够按照我们的意愿使用配置文件。使用情景:我们现在有两套WCF服务,一个是测试服务,一个是正式服务,我们想让VS在Debug模式下选择包含测试服务的配置文件,在Release模式下选择包含正式服务的配置文件。这里使用的技术是MSB 阅读全文
posted @ 2013-07-09 22:39 ILoveSleep 阅读(2280) 评论(8) 推荐(3) 编辑
摘要: 在微软标准的Linq中,并没有DistinctBy扩展和ForEach扩展,但在平时使用工作中却又经常需要使用到这两个功能,照理来说,微软在Linq中应该包含这两个扩展才对,可事实上为什么并没有呢?本文我就来说说自己对这两个扩展的理解!关于DistinctBy扩展顾名思义,DistinctBy扩展就是根据一个键值进行唯一性的筛选,将有重复键值的元素剔除,仅保留一个!当然Linq中有Distinct扩展,但其功能简直是弱爆了!用过的同志相信都对Distinct扩展吐槽无数遍了吧!如果你要使用Distinct扩展实现DistinctBy扩展的功能,还要专门定义一个辅助类!Oh,My God!这简直 阅读全文
posted @ 2013-07-06 09:31 ILoveSleep 阅读(3037) 评论(9) 推荐(3) 编辑
摘要: 未将对象引用到实例,即NullReferenceException异常,我相信这是c#编程中最常见的错误之一,至少我在做项目的过程中,有很多时候都会抛出这个异常。每当这个异常出现的时候,我都会头皮一紧,因为以我的经验总结,一般情况下不会出现这个错误,但是一旦出现这个错误往往是比较难排查的,特别是代码量较大的时候,而等找到bug时,往往又会出现纠结状态,因为NullReferenceException异常经常和程序的逻辑紧密相连,这就意味着不是你的程序写错了,而很有可能是你的编程逻辑设计的不够合理。当然,NullReferenceException异常的解决方案也非常的简单,只要在异常处加上类似 阅读全文
posted @ 2013-07-04 21:01 ILoveSleep 阅读(4476) 评论(17) 推荐(2) 编辑
摘要: 严格的说,这篇叫做lock篇不是太合适,为什么这么说,看完短文就知道了!大家都对上一篇神奇的Timer中情景2中的示例有很多自己的看法,请允许我今天一一的评说一下吧,说的不对的地方,欢迎拍砖!1.还是应该写一个5分钟的定时器,只不过在回调函数中检查内容是否有变化!这个方案是没有问题的,因为RichTextBox中有一个Modified属性,用它可以来检查内容时候有改变,具体的代码很简单,我就不写了但是这个方案的不足之处在于:如果RichTextBox没有Modified属性呢?那你就需要做两件事:1.每次回调时需要比较当前内容与上一次内容是否相同;2.比较完之后,需要缓存此时RichTextB 阅读全文
posted @ 2013-06-13 21:24 ILoveSleep 阅读(1867) 评论(0) 推荐(2) 编辑
摘要: 最近的一个项目有一些地方需要用到定时功能,在设计过程中,突然发现.net的Timer类居然还有很多我以前没有用过的功能,这里就跟大家分享一下注:这里的Timer类特指System.Threading.Timer类情景1:我需要服务器在每天的00:00点执行一个操作我当开始想到的方法很2b,居然是设定定时器每个1分钟去检查时间,如果当前时间与00:00相差不超过1分钟时,就执行操作!!!由于这段的代码太过2b,所以就不放上来了!我都不知道自己刚开始怎么会想到如此2的设计,几乎刚把代码写完我自己就把这个方案个否定了,极度浪费资源不说,还不能精准的在00:00执行操作!于是我又一次查看了msdn,m 阅读全文
posted @ 2013-06-12 23:21 ILoveSleep 阅读(3982) 评论(35) 推荐(16) 编辑
摘要: WCF是个好东西啊!用起来方便,功能强大,扩展性也比较大,但是WCF也有坑爹的地方,坑爹的地方就在于:如何才能在客户端正确的关闭WCF连接!如果你直接将客户端调用Close关闭,或者使用using语句,那你将是个悲剧,这点相信使用WCF的同志都知道的,因为ClientBase类的Close()方法被调用后,实际上是关闭了一个网络会话,并且会抛出异常!CommunicationException和TimeoutException!这似乎违反常理,但确实发生了。因为一般来说Close函数都不会抛出异常。这个问题的解决办法是使用Try-Catch语句包含Close()方法,然后再异常处理中使用Abo 阅读全文
posted @ 2013-06-11 21:28 ILoveSleep 阅读(1770) 评论(4) 推荐(1) 编辑