挖一挖C#中那些我们不经常使用的东西之系列(4)——GetHashCode,ExpandoObject
一:GetHashCode
从MSDN上能够看到的解释是:用作特定类型的哈希函数,也就是说不论什么对象的实例都会有一个int32类型的HashCode。而且存放在FCL中的
HashCollection中,废话不说,看个样例:
从图中能够看到,两个类实例的hashcode不同。说明二者不是同一个引用,也就有了不同的hashcode。利用这个特性,我们是不是
能够生成一些随机数字呢?
1:在for循环中用random生成。
![](https://common.cnblogs.com/images/copycode.gif)
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 }
![](https://common.cnblogs.com/images/copycode.gif)
我们知道Random都是伪随机的,所以会出现一连串的数字反复。那么我真的想要随机数怎么办呢?这时候就能够用HashCode试试了
2:for循环中的hashcode
![](https://common.cnblogs.com/images/copycode.gif)
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 }
![](https://common.cnblogs.com/images/copycode.gif)
只是我们看到,我们不断的向托管推上仍垃圾,所以对GC还是有一定的性能开销的。
二:ExpandoObject
我们知道php,asp。js都是解释性的语言,免去了编译的烦恼,我去年做过半年的php,然后回归C#,然后就会对C#的编译特别的不爽
,有时候一个solution一百多个dll,编译都要10多分钟,每周的公布日都会通过自己主动化工具公布到生产环境,然而在到生产环境下前的各个环
境中,都须要又一次编译,导致非常多时间都耗费在编译上面去了,只是在C#4.0之后。我们通过动态的特性,也可以做到把C#当作js来写。
比方这里的ExpandoObject类,我们能够通过后期绑定来向ExpandoObject动态的追加一些属性和方法,很有意思。只是这里要注意的是
一但开了dynamic,编译器也就不认这些代码了。等着CLR里面的JIT去跑它了,从而达到免编译功能。
![](https://common.cnblogs.com/images/copycode.gif)
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 }
![](https://common.cnblogs.com/images/copycode.gif)
挖一挖C#中那些我们不经常使用的东西之系列(4)——GetHashCode,ExpandoObject的更多相关文章
- 挖一挖C#中那些我们不经常使用的东西之系列(1)——ToDictionary,ToLookup
这个系列我们看看C#中有哪些我们知道.可是又不知道怎么用.又或者懒得去了解的东西,比方这篇我们要介绍的toDictionary 和ToLookup. 从图中我们看到有四个ToXXX的方法,当中ToAr ...
- 挖一挖C#中那些我们不常用的东西之系列(3)——StackTrace,Trim
时间太快了,三月又要过去了,告别一下...继续期待生死未卜的四月,今天我们继续挖一挖. 一: Environment.StackTrace 可能我们看到最多的就是catch中的e参数,里面会有一个St ...
- 挖一挖不常用到而又很实用的重载-Trim
这个我想没有那个开发人员说不知道,但是里面有一个重载,这个不知道有多少开发人员知道! 可以看到,我可以去掉字符串前后的指定字符,只要我在char[]中指定即可,而不是仅仅去掉空格,这次为什么要提它,是 ...
- 挖一挖@Bean这个东西
有Bean得治 任何一个正常程序的访问都会在内存中创建非常多的对象,对象与对象之间还会出现很多依赖关系(一个处理业务逻辑的类中几乎都会使用到别的类的实例),一般的做法都是使用new关键字来创建对象,对 ...
- 挖一挖不常用到而又很实用的重载-Split
Split这个基本上所有的程序开发人员都用到,一般使用单字符和长字符串拆分字符串的较多,其实还有一个重载非常好用,那就是多种组合字符来进行拆分. 例如: "aaaaaaaaaa{@}bbbb ...
- ArcGIS案例学习笔记-批处理擦除挖空挖除相减
ArcGIS案例学习笔记-批处理擦除挖空挖除相减 联系方式:谢老师,135-4855-4328,xiexiaokui#qq.com 目的:批处理擦除.挖空.挖除.相减 数据源:chp13/ex5/pa ...
- ArcGIS案例学习笔记-手动编辑擦除挖空挖除相减
ArcGIS案例学习笔记-手动编辑擦除挖空挖除相减 联系方式:谢老师,135-4855-4328,xiexiaokui#qq.com 目的:手动编辑擦除.挖空.挖除.相减 1. 选中内部要素 2. c ...
- 挖一挖不经常使用到而又非常有用的重载-Split
Split这个基本上全部的程序开发者都用到,一般使用单字符和长字符串拆分字符串的较多.事实上另一个重载很好用.那就是多种组合字符来进行拆分. 比如: "aaaaaaaaaa{@}bbbbbb ...
- Spring Web MVC中的页面缓存支持 ——跟我学SpringMVC系列
Spring Web MVC中的页面缓存支持 ——跟我学SpringMVC系列
随机推荐
- 图文详解前端CSS中的Grid布局,你真的可以5分钟掌握
前言 网站的布局是一个网站设计的根本,CSS的Grid布局已经成为了未来网站布局的基本方式. 今天这篇文章我们通过图文,一起看看如何自己实现Grid布局方式. CSS 第一个Grid布局 首先我们看看 ...
- PL/SQL&存储过程||存储函数&触发器
plsql 有点:交互式 非过程化 数据操纵能力强 自动导航语句简单 调试简单 想率高 声明类型的方式 1.基本类型 2.引用变量 3.记录型变量 基本格式 declare 声明 b ...
- python获取小程序手机号并绑定
最近在做小程序开发,在其中也遇到了很多的坑,获取小程序的手机号并绑定就遇到了一个很傻的坑. 流程介绍 官方流程图 小程序使用方法 需要将 <button> 组件 open-type 的值设 ...
- 前台vue的使用简单小结
前台vue的使用简单小结 本项目要求:安装有node.js 6.0以及以上安装npm使用vue.js官方安装方法初始化项目npm install安装VueResurce:npm install vue ...
- DP【p2051(bzoj 1801)】 [AHOI2009]中国象棋.
题目描述 这次小可可想解决的难题和中国象棋有关,在一个N行M列的棋盘上,让你放若干个炮(可以是0个),使得没有一个炮可以攻击到另一个炮,请问有多少种放置方法.大家肯定很清楚,在中国象棋中炮的行走方式是 ...
- 洛谷——P2118 比例简化
P2118 比例简化 题目描述 在社交媒体上,经常会看到针对某一个观点同意与否的民意调查以及结果.例如,对某一观点表示支持的有1498 人,反对的有 902人,那么赞同与反对的比例可以简单的记为149 ...
- 7.26机房报零赛——无尽的矩阵【kmp+hash】
恩,其实大家都没有报零,反正我是蒟蒻 为了纪念我第一次打过哈希,特此写一篇题解 题目描述 从前有一个的小矩阵,矩阵的每个元素是一个字母(区分大小写),突然有一天它发生了 变异,覆盖了整个二维空间,即不 ...
- Vue之$set使用
背景 后端参与前端开发的小白,在开发过程中遇到了如下情况:当vue的data里边声明或者已经赋值过的对象或者数组(数组里边的值是对象)时,向对象中添加新的属性,如果更新此属性的值,是不会更新视图的. ...
- About Markdown -- 进入Markdown园子
起初也就是打算简单一些Markdown在编辑Blog方面的一些常用操作和注意事项,没想到,一下没刹住,毫无防备地闯进了这个好趣的园子-. 1. 认识 Markdown HTML(HyperText M ...
- apache 单独生成模块
apache 单独生成模块 一般这种模块都是后期自己去生成的,比如一般在安装apache时都会--enable-so ,允许动态加载模块. 这个模块你可以这样去生成. 1.下载一个与当前使用的apa ...