挖一挖C#中那些我们不常用的东西之系列(4)——GetHashCode,ExpandoObject
2023-02-18 16:44:08 时间
这篇继续分享下GetHashCode和ExpandoObject这两个比较好玩的方法。
一: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 }
相关文章
- 年轻的樵夫哟,你掉的是这个免费 8 核 4G 公网服务器,还是这个随时可用的 Docker 实验平台?
- Newbe.Claptrap 框架如何实现 Claptrap 的多样性?
- 十多位全球技术专家,为你献上近十个小时的.Net微服务介绍
- Newbe.Claptrap 框架如何实现多级生命周期控制?
- 轻松应对并发问题,Newbe.Claptrap 框架中 State 和 Event 应该如何理解?
- 轻松应对并发问题,简易的火车票售票系统,Newbe.Claptrap 框架用例,第一步 —— 业务分析
- 轻松应对并发问题 Newbe.Claptrap 框架入门,第二步 —— 简单业务,清空购物车
- Newbe.Claptrap 框架中为什么用 Claptrap 和 Minion 两个词?
- 轻松应对并发问题 Newbe.Claptrap 框架入门,第一步 —— 创建项目,实现简易购物车
- 谈反应式编程在服务端中的应用,数据库操作优化,提速 Upsert
- 十万同时在线用户,需要多少内存?——Newbe.Claptrap 框架水平扩展实验
- docker-mcr 助您全速下载 dotnet 镜像
- 朋友,您可能是MCR的受害者
- 谈反应式编程在服务端中的应用,数据库操作优化,万条记录从20秒到0.5秒
- 一起了解 .Net Foundation 项目 No.24
- 一起了解 .Net Foundation 项目 No.23
- 一起了解 .Net Foundation 项目 No.22
- 一起了解 .Net Foundation 项目 No.21
- 一起了解 .Net Foundation 项目 No.20
- 一起了解 .Net Foundation 项目 No.19