博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
挖一挖C#中那些我们不经常使用的东西之系列(4)——GetHashCode,ExpandoObject
阅读量:6888 次
发布时间:2019-06-27

本文共 1870 字,大约阅读时间需要 6 分钟。

一:GetHashCode

  从MSDN上能够看到的解释是:用作特定类型的哈希函数,也就是说不论什么对象的实例都会有一个int32类型的HashCode。而且存放在FCL中的

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

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

能够生成一些随机数字呢?

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

1         static void Main(string[] args) 2         { 3             var list = new List
(); 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
(); 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://nqqbl.baihongyu.com/

你可能感兴趣的文章
ajax学习总结
查看>>
ruby 访问权限
查看>>
Codeforces Round #327 590B Chip 'n Dale Rescue Rangers(等效转换,二分)
查看>>
Angular 学习笔记 (Material Datepicker)
查看>>
Docker 常用命令
查看>>
Roman Numeral Converter
查看>>
HDFS 异常处理与恢复
查看>>
asp.net core输出中文乱码的问题
查看>>
该对象尚未初始化。请确保在所有其他初始化代码后面的应用程序启动代码中调用 HttpConfiguration.EnsureInitialized()。...
查看>>
转:CentOS7 下 Redis4 安装与配置教程(Redis开机启动)
查看>>
ASP.NET中Repeater控件行颜色交替显示
查看>>
【总结整理】javascript进阶学习(慕课网)
查看>>
汕头市队赛 SRM10 T3 数学上来先打表
查看>>
android——开启无线调试app的方式
查看>>
vue使用axios请求后端数据
查看>>
LA 4287 等价性证明
查看>>
POJ 2774 后缀数组
查看>>
NPOI读取excel表,如果有公式取出的是公式,想要取数字怎么办?
查看>>
Javascript之运动框架2
查看>>
关于动态加载外部js的执行顺序
查看>>