挖一挖C#中那些我们不经常使用的东西之系列(4)——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 }
挖一挖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系列
随机推荐
- HDU 1541.Stars-一维树状数组(详解)
树状数组,学长很早之前讲过,最近才重视起来,enmmmm... 树状数组(Binary Indexed Tree(B.I.T), Fenwick Tree)是一个查询和修改复杂度都为log(n)的数据 ...
- android 错误
问题1 手机开发者选项 开启USB安装 问题2 怎么变成了两行 问题3 运行虚拟机报错 电脑没有启用虚拟技术或者没有安装Intel HAXM软件 sdk下找到 (或者官网下载 https://soft ...
- NYOJ 71 乘船问题【贪心】
时间复杂度O(n) 有n个人,第i个人的重量为w[i],每艘船的最大载重量均为c,且最多只能乘两个人.用最少的船装载所有人. 思路:从最轻的开始考虑,让最轻的和最重的一条船,若超出重量则可判定最重的只 ...
- 第十四届华中科技大学程序设计竞赛 J Various Tree【数值型一维BFS/最小步数】
链接:https://www.nowcoder.com/acm/contest/106/J 来源:牛客网 题目描述 It's universally acknowledged that there'r ...
- Codeforces 954H Path Counting(DP)
题目链接 Path Counting 题意 给定一棵高度为$n$的树,给出每一层的每个点的儿子个数(某一层的所有点儿子个数相同). 令$f_{k}$为长度为$k$的路径条数,求$f_{1}, ...
- Python与数据库[1] -> 数据库接口/DB-API[3] -> ODBC 适配器
ODBC适配器 / ODBC Adaptor ODBC(Open Database Connectivity,开放数据库互连)是微软公司开放服务结构(WOSA,Windows Open Service ...
- 利用MAP动态创建C++类对象
MFC的CRuntimeClass利用链表实现了C++类的动态创建.但是如果项目中对动态创建的要求比较低,我们完全可以利用map实现简单的动态创建. http://blog.csdn.net/yeji ...
- exports 与 module.exports 的区别
exports与module.exports的作用就是将方法或者是变量暴露出去,以便给其他模块调用,再直接点,就是给其他模块通过require()的方式引用. 那么require()一个模块时,到底做 ...
- Spark-submit脚本解读
#!/usr/bin/env bash # # Licensed to the Apache Software Foundation (ASF) under one or more # contrib ...
- Mysql insert without auto-increase when duplicate
INSERT INTO video_tag_all(tagname,ctime) FROM video_tag_all WHERE (SELECT last_insert_id(id) FROM vi ...