挖一挖C#中那些我们不常用的东西之系列(4)——GetHashCode,Ex
这篇继续分享下GetHashCode和ExpandoObject这两个比较好玩的方法。
从MSDN上可以看到的解释是:用作特定类型的哈希函数,也就是说任何对象的实例都会有一个int32类型的HashCode,并且存放在FCL中的 HashCollection中,废话不说,看个例子: 从图中可以看到,两个类实例的hashcode不同,说明二者不是同一个引用,也就有了不同的hashcode,利用这个特性,我们是不是 可以生成一些随机数字呢? 1:在for循环中用random生成。 Main( list = List<>
( i = ; i < .MaxValue; i++ list.Add( Random().Next(,
list.ForEach((i) =>
}
我们知道Random都是伪随机的,所以会出现一连串的数字重复,那么我真的想要随机数怎么办呢?这时候就可以用HashCode试试了 2:for循环中的hashcode Main( list = List<>
( i = ; i < .MaxValue; i++ list.Add(
list.ForEach((i) =>
}
不过我们看到,我们不断的向托管推上仍垃圾,所以对GC还是有一定的性能开销的。
? ? ?我们知道php,asp,js都是解释性的语言,免去了编译的烦恼,我去年做过半年的php,然后回归C#,然后就会对C#的编译特别的不爽 ,有时候一个solution一百多个dll,编译都要10多分钟,每周的发布日都会通过自动化工具发布到生产环境,然而在到生产环境下前的各个环 境中,都需要重新编译,导致很多时间都耗费在编译上面去了,不过在C#4.0之后,我们通过动态的特性,也能够做到把C#当作js来写。 比如这里的ExpandoObject类,我们可以通过后期绑定来向ExpandoObject动态的追加一些属性和方法,非常有意思。不过这里要注意的是 一但开了dynamic,编译器也就不认这些代码了,等着CLR里面的JIT去跑它了,从而达到免编译功能。 Main( dynamic obj =
obj.Name =
obj.Age =
obj.Call = Action(() => { Console.WriteLine(
}
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |