码迷,mamicode.com
首页 > Windows程序 > 详细

挖一挖C#中那些我们不常用的东西之系列(4)——GetHashCode,ExpandoObject

时间:2015-07-25 09:26:03      阅读:186      评论:0      收藏:0      [点我收藏+]

标签:

一:GetHashCode

  从MSDN上可以看到的解释是:用作特定类型的哈希函数,也就是说任何对象的实例都会有一个int32类型的HashCode,并且存放在FCL中的

HashCollection中,废话不说,看个例子:

技术分享

从图中可以看到,两个类实例的hashcode不同,说明二者不是同一个引用,也就有了不同的hashcode,利用这个特性,我们是不是

可以生成一些随机数字呢?

1:在for循环中用random生成。

技术分享
 1         static void Main(string[] args)
 2         {
 3             var list = new List<int>();
 4 
 5             for (int i = 0; i < byte.MaxValue; i++)
 6             {
 7                 list.Add(new Random().Next(0, byte.MaxValue));
 8             }
 9 
10             list.ForEach((i) =>
11             {
12                 Console.WriteLine(i);
13             });
14 
15             Console.Read();
16         }
技术分享

技术分享

我们知道Random都是伪随机的,所以会出现一连串的数字重复,那么我真的想要随机数怎么办呢?这时候就可以用HashCode试试了

2:for循环中的hashcode

技术分享
 1         static void Main(string[] args)
 2         {
 3             var list = new List<int>();
 4 
 5             for (int i = 0; i < byte.MaxValue; i++)
 6             {
 7                 list.Add(new Random().GetHashCode());
 8             }
 9 
10             list.ForEach((i) =>
11             {
12                 Console.WriteLine(i);
13             });
14 
15             Console.Read();
16         }
技术分享

技术分享

不过我们看到,我们不断的向托管推上仍垃圾,所以对GC还是有一定的性能开销的。

 

二:ExpandoObject

     我们知道php,asp,js都是解释性的语言,免去了编译的烦恼,我去年做过半年的php,然后回归C#,然后就会对C#的编译特别的不爽

,有时候一个solution一百多个dll,编译都要10多分钟,每周的发布日都会通过自动化工具发布到生产环境,然而在到生产环境下前的各个环

境中,都需要重新编译,导致很多时间都耗费在编译上面去了,不过在C#4.0之后,我们通过动态的特性,也能够做到把C#当作js来写。

比如这里的ExpandoObject类,我们可以通过后期绑定来向ExpandoObject动态的追加一些属性和方法,非常有意思。不过这里要注意的是

一但开了dynamic,编译器也就不认这些代码了,等着CLR里面的JIT去跑它了,从而达到免编译功能。

技术分享
 1         static void Main(string[] args)
 2         {
 3             dynamic obj = new System.Dynamic.ExpandoObject();
 4             
 5             obj.Name = "hxc";
 6 
 7             obj.Age = 20;
 8 
 9             obj.Call = new Action(() => { Console.WriteLine("call me!!!"); });
10 
11             obj.Call();
12 
13             Console.Read();
14         }
技术分享

技术分享

版权声明:本文为博主http://www.zuiniusn.com原创文章,未经博主允许不得转载。

挖一挖C#中那些我们不常用的东西之系列(4)——GetHashCode,ExpandoObject

标签:

原文地址:http://blog.csdn.net/u013948190/article/details/47053135

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!