随笔分类 -  Efficient C#

摘要:以下代码会出问题: public static T Protect(Func func, UserLevel pageRole) where T : ActionResult, new(){ try { return func(); } catch (Exception err) { if (typeof(T) is JsonResult... 阅读全文
posted @ 2014-10-11 13:39 陆敏技 阅读(684) 评论(1) 推荐(0) 编辑
摘要:参考:http://www.cnblogs.com/KnightsWarrior/archive/2010/06/30/1767981.html,本文示例代码多来自此处;参考:《重构:改善既有代码》;完美而高档的摩天大厦应至少具备两个特点:房间内部是清洁的、结构上是无懈可击的。优秀的代码也应如此。码农要负责打扫房间,架构师负责搭建一个经得起考验的代码结构。有些人兼顾码农和架构的角色。如果你既不是码农,也不是架构师,那么就请离代码远点,离重构远点,要有多远滚多远。一:打扫房间1:避免重复代码避免重复代码在大多数情况下适用,但是我有一个逆观点是:允许重复代码,如果它影响到你的架构。2:提取方法原则 阅读全文
posted @ 2013-10-06 19:51 陆敏技 阅读(1708) 评论(1) 推荐(1) 编辑
摘要:在日常编写代码过程中,常常会碰到乱码问题,一个典型的情况是浏览网页,如果网站开发者缺少经验,就会带来这种令人头疼的问题。要了解乱码的症结,我们就得从字符集和字符编码说起,先来看看它们到底是什么: 1:字符集:是一个系统支持的所有抽象字符的集合。字符是各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等。 2:字符编码:是一套法则,最常规的理解就是:让程序根据这个法则对应到相应的字符集中将byte[]存取为string。 现在,我们要来看看这些东西在 .NET 中对应的是什么。一:字符集和字符编码 如果想得到全部的字符集,则使用 System.Text.Encod... 阅读全文
posted @ 2013-04-23 08:07 陆敏技 阅读(8065) 评论(1) 推荐(2) 编辑
摘要:源码:Luminji.Improve20111018.rar====目录前 言第一部分 语言篇第1章 基本语言要素 / 2建议1:正确操作字符串 / 2建议2:使用默认转型方法 / 6建议3:区别对待强制转型与as和is / 9建议4:TryParse比Parse好 / 12建议5:使用int?来确... 阅读全文
posted @ 2011-09-20 11:13 陆敏技 阅读(13075) 评论(41) 推荐(19) 编辑
摘要:《编写高质量代码:改善C#程序的157个建议》中关于勘误的描述:资源及勘误通常情况下,一个问题的解决方案往往不止一种,你可能会不同意本书中的一些观点,甚至会强烈反对。没有关系,你可以通过luminji@hotmail.com(E-mail)与我分享你的宝贵意见,同时也可以在http://www.cn... 阅读全文
posted @ 2011-09-20 11:12 陆敏技 阅读(5730) 评论(20) 推荐(1) 编辑
摘要:MD5或者说HASH值是一种不可逆的算法。如果需要从密文还原成明文,那么就需要对称和非对称这两类可逆算法。首先,简单介绍下这两类算法。图9-1是对称算法的示意图:图9-1 对称算法在对称算法中,首先需要发送方和接收方协定一个密钥K。K可以是一个密钥对,但是必须要求加密密钥和解密密钥之间能够互相推算出来。在最简单也是最常用的对称算法中,加密和解密共享一个密钥。上图中,我们为了简单期间,使用的就是一个密钥。密钥K为了防止被第三方获取,可以通过一个秘密通道由发送方传送给接收方。当然,这个秘密通道可以是任何形式,如果觉得可以,你甚至可以寄送一封邮件给对方告诉他密钥。对称加密中明文通过对称加密成密文,在 阅读全文
posted @ 2011-06-01 09:55 陆敏技 阅读(6570) 评论(6) 推荐(2) 编辑
摘要:在命名空间System.Threading.Tasks下,有一个静态类Parallel简化了在同步状态下的Task的操作。Parallel主要提供了3个有用的方法:For、ForEach、Invoke。For方法,主要用于处理针对数组元素的并行操作,如下:staticvoid Main(string... 阅读全文
posted @ 2011-05-19 08:59 陆敏技 阅读(16965) 评论(11) 推荐(8) 编辑
摘要:一:Task的优势ThreadPool相比Thread来说具备了很多优势,但是ThreadPool却又存在一些使用上的不方便。比如:1: ThreadPool不支持线程的取消、完成、失败通知等交互性操作;2: ThreadPool不支持线程执行的先后次序;以往,如果开发者要实现上述功能,需要完成很多... 阅读全文
posted @ 2011-05-13 08:35 陆敏技 阅读(50886) 评论(40) 推荐(27) 编辑
摘要:在C#中让线程同步的另一种编码方式就是使用线程锁。所谓线程锁,就是锁住一个资源,使得应用程序只能在此刻有一个线程访问该资源。可以用下面这句不是那么贴切的话来理解线程锁的作用:锁,就是让多线程变成单线程。在C#中,可以将被锁定的资源理解成new出来的普通对象。既然需要锁定的资源就是一个C#中的对象,我们就该仔细思考,到底什么样的对象能够成为一个锁对象(也叫同步对象)?在选择同步对象的时候,应当始终注意以下几点: q同步对象在需要同步的多个线程中是可见的、同一个对象; q非静态方法中,静态变量不应作为同步对象;q值类型对象不能作为同步对象;q避免将字符串作为同步对象。q降低同步对象的可见 阅读全文
posted @ 2011-05-09 09:14 陆敏技 阅读(7421) 评论(11) 推荐(9) 编辑
摘要:开发者总尝试对自己的代码有更多的控制。“让那个还在工作的线程马上停止下来”就是诸多要求中的一种。然而事与愿违,这里面至少存在两个问题:第一个问题是:正如线程不能立即启动一样,线程也并不能说停就停。无论采用何种方式通知工作线程需要停止,工作线程都会忙完手头最紧要的活,然后在它觉得合适的时候退出。以最传... 阅读全文
posted @ 2011-05-08 08:26 陆敏技 阅读(39780) 评论(13) 推荐(5) 编辑
摘要:所谓线程同步,就是多个线程之间在某个对象上执行等待(也可理解为锁定该对象),直到该对象被解除锁定。C#中对象的类型分为引用类型和值类型。CLR在这两种类型上的等待是不一样的。我们可以简单的理解为在CLR中,值类型是不能被锁定的,也即:不能在一个值类型对象上执行等待。而在引用类型上的等待机制,则分为两类:锁定和信号同步。 锁定,使用关键字lock和类型Monitor。两者没有实质区别,前者其实是后者... 阅读全文
posted @ 2011-05-03 08:55 陆敏技 阅读(11530) 评论(22) 推荐(20) 编辑
摘要:前两期地址:C#高效编程话题集1(每期10话题)C#高效编程话题集2(每期10话题)本期话题:1:使用属性还是字段首先重大区别就是属性实质是方法,所以:1:可以为属性添加代码;2:可以让属性支持线程安全;见effective c#第一版的第一章;3:属性得到了VS编辑器的支持,得以实现自动属性这种功能。4:自动属性的特点在LINQ中得到了广泛应用,尤其是匿名类型中,只能实现只读的自动属性,匿名类型不支持字段;5:从设计的角度,也就是面向对象的角度,建议使用属性;6:如果某个属性仅仅作为类型内部使用,而且不涉及到上面5点内容,则建议使用字段还有一点,属性在序列化中有点尴尬,由于属性是方法,所以不 阅读全文
posted @ 2011-04-19 08:40 陆敏技 阅读(5733) 评论(15) 推荐(8) 编辑
摘要:在标准的Dispose模式中(见前一篇博客“C#中标准Dispose模式的实现”),提到了需要及时释放资源,却并没有进一步细说让引用等于null是否有必要。有一些人认为等于null可以帮助垃圾回收机制早点发现并标识对象是垃圾。其他人则认为这没有任何帮助。是否赋值为null的问题首先在方法的内部被人提... 阅读全文
posted @ 2011-04-07 08:40 陆敏技 阅读(16462) 评论(57) 推荐(7) 编辑
摘要:需要明确一下C#程序(或者说.NET)中的资源。简单的说来,C#中的每一个类型都代表一种资源,而资源又分为两类:托管资源:由CLR管理分配和释放的资源,即由CLR里new出来的对象;非托管资源:不受CLR管理的对象,windows内核对象,如文件、数据库连接、套接字、COM对象等;毫无例外地,如果我... 阅读全文
posted @ 2011-03-29 08:50 陆敏技 阅读(30840) 评论(40) 推荐(21) 编辑
摘要:24、23期:http://www.microsoft.com/china/community/clubs/blogs.mspx 阅读全文
posted @ 2011-03-25 13:28 陆敏技 阅读(664) 评论(0) 推荐(0) 编辑
摘要:第一期话题在:C#高效编程话题集1(每期10话题)C#快速成长团队第二期话题来到。欢迎进入C#快速成长团队进行讨论。1:确保集合的线程安全如果使用.net4.0,有新的线程安全集合类新的 System.Collections.Concurrent 命名空间引入了多个新的线程安全集合类,可在需要时随时提供对项的无锁访问,并在锁适用时提供细粒度锁定。 在多线程方案中使用这些类应获得优于集合类型(例如,... 阅读全文
posted @ 2011-03-25 09:36 陆敏技 阅读(6588) 评论(17) 推荐(14) 编辑
摘要:要选择正确的集合,我们首先要了解一些数据结构的知识。所谓数据结构,就是相互之间存在一种或多种特定关系的数据元素的集合。结合下图,我们看一下对集合的分类。 集合分类 在上图中,可以看到,集合总体上分为线性集合和非线性集合。线性集合指元素具有唯一的前驱和后驱的数据结构类型。非线性集合是指具有多个前驱或后驱的数据结构类型,如:树、图。在FCL中,非线性集合实现的比较少,所以我们将会更多的讨论线性集合。... 阅读全文
posted @ 2011-03-24 09:12 陆敏技 阅读(13786) 评论(23) 推荐(24) 编辑
摘要:近来在小组C#快速成长团队讨论了若干话题,有些感觉不错,特总结与大家分享。当然,所谓话题,重点在于进行讨论,是否是最佳实践也属于大家的个人之见。以下观点若有差错,尽情蹂躏。1:String str1 = “str1”+ 9; 和String str2 = “str2”+ 9.ToString(); 哪个效率高可以知道“str1”+ 9,在运行时会完成一次装箱行为。9.ToString(),没有发生... 阅读全文
posted @ 2011-03-02 09:02 陆敏技 阅读(9518) 评论(32) 推荐(21) 编辑
摘要:dynamic是FrameWork4.0的新特性。dynamic的出现让C#具有了弱语言类型的特性。编译器在编译的时候不再对类型进行检查,编译期默认dynamic对象支持你想要的任何特性。比如,即使你对GetDynamicObject方法返回的对象一无所知,你也可以像如下那样进行代码的调用,编译器不会报错: dynamic dynamicObject = GetDynamicObject(); Console.WriteLine(dynamicObject.Name); Console.WriteLine(dynamicObject.SampleMethod());说到正确用法,那么首先应该指 阅读全文
posted @ 2011-02-18 09:01 陆敏技 阅读(20544) 评论(19) 推荐(15) 编辑
摘要:迭代器模式是GOF23种模式中的一种,目的是为了提供对集合的遍历。为什么要实现迭代器模式:假设存在一个数组,我们的遍历模式可能是采用依据索引来进行遍历。又假设存在一个HashTable,我们的遍历模式就可能按照键值来进行遍历。无论是哪个集合,如果它们的遍历没有一个公共的接口,那么我们的客户端进行调用的时候,相当于是对具体类型进行了编码。这样以来,当需求变化的时候,就必须修改我们的代码。并且,由于客户端代码过多的关注了集合的内部实现,代码的可移植性就会变得很差,这直接违反了面向对象中的开闭原则。于是,迭代器模式就诞生了。现在,不要管FCL中是如何实现该模式的,我们先来实现一个我们自己的迭代器模式 阅读全文
posted @ 2011-02-17 13:47 陆敏技 阅读(4648) 评论(38) 推荐(5) 编辑

Web Counter
Coupon for Contacts
点击右上角即可分享
微信分享提示