挖一挖C#中那些我们不常用的东西之系列(4)——GetHashCode,ExpandoObject

简介:

 这篇继续分享下GetHashCode和ExpandoObject这两个比较好玩的方法。

一:GetHashCode

  从MSDN上可以看到的解释是:用作特定类型的哈希函数,也就是说任何对象的实例都会有一个int32类型的HashCode,并且存放在FCL中的

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

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

可以生成一些随机数字呢?

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

static void Main(string[] args)
        {
            var list = new List<int>();

            for (int i = 0; i < byte.MaxValue; i++)
            {
                list.Add(new Random().Next(0, byte.MaxValue));
            }

            list.ForEach((i) =>
            {
                Console.WriteLine(i);
            });

            Console.Read();
        }

我们知道Random都是伪随机的,所以会出现一连串的数字重复,那么我真的想要随机数怎么办呢?这时候就可以用HashCode试试了

2:for循环中的hashcode

static void Main(string[] args)
        {
            var list = new List<int>();

            for (int i = 0; i < byte.MaxValue; i++)
            {
                list.Add(new Random().GetHashCode());
            }

            list.ForEach((i) =>
            {
                Console.WriteLine(i);
            });

            Console.Read();
        }

不过我们看到,我们不断的向托管推上仍垃圾,所以对GC还是有一定的性能开销的。

 

二:ExpandoObject

     我们知道php,asp,js都是解释性的语言,免去了编译的烦恼,我去年做过半年的php,然后回归C#,然后就会对C#的编译特别的不爽

,有时候一个solution一百多个dll,编译都要10多分钟,每周的发布日都会通过自动化工具发布到生产环境,然而在到生产环境下前的各个环

境中,都需要重新编译,导致很多时间都耗费在编译上面去了,不过在C#4.0之后,我们通过动态的特性,也能够做到把C#当作js来写。

比如这里的ExpandoObject类,我们可以通过后期绑定来向ExpandoObject动态的追加一些属性和方法,非常有意思。不过这里要注意的是

一但开了dynamic,编译器也就不认这些代码了,等着CLR里面的JIT去跑它了,从而达到免编译功能。

static void Main(string[] args)
        {
            dynamic obj = new System.Dynamic.ExpandoObject();
            
            obj.Name = "hxc";

            obj.Age = 20;

            obj.Call = new Action(() => { Console.WriteLine("call me!!!"); });

            obj.Call();

            Console.Read();
        }

相关文章
|
8月前
|
测试技术
软件测试面试者注意啦!尽量避开这个坑,千万别让培训机构割韭菜啦!
软件测试面试者注意啦!尽量避开这个坑,千万别让培训机构割韭菜啦!
|
10月前
|
人工智能 Rust 安全
没有人能真正精通C++
没有人能真正精通C++
|
SQL 安全 前端开发
来来来开小灶了,年后求职和跳槽的看过来,悄悄的看悄悄的收藏
面试官,您好我叫(XXX),今天来公司面试 JAVA开发工程师,之前在(XXX 公司)任职,从事这一行已经有(几)个年头了。这几年开发,主要接触的项目包括(你做过的项目!)等。在开发过程中,也用过好些框架,比如∶ springboot、springcloud、springmvc、spring、Mybatis等技术框架。熟练掌握框架之间的整合技术。有时候因为项目需求或是为了开发的高效性,自己我会研究一些技术,使用一些常用的主流 Java技术,例如∶(吹!用没用过不重要,主要是就是英文的!)。前端的技术也研究过一些。如(原生的、框架啊都往上整!)
165 0
来来来开小灶了,年后求职和跳槽的看过来,悄悄的看悄悄的收藏
|
UED
挖一挖贝塞尔曲线那些事(一)
挖一挖贝塞尔曲线那些事
158 0
挖一挖贝塞尔曲线那些事(一)
|
iOS开发
挖一挖贝塞尔曲线那些事(二)
挖一挖贝塞尔曲线那些事
109 0
挖一挖贝塞尔曲线那些事(二)
|
iOS开发 UED
挖一挖贝塞尔曲线那些事
贝塞尔曲线的最初设计是服务于工业设计,尤其应用与汽车曲线设计。随着计算机画图的应用广泛,若想在计算机上画出平滑精准的曲线并不是一件容易的事,贝塞尔曲线解决了这样的问题,贝塞尔虚线通过起始点与结束点来确定曲线的首尾,通过若干个控制点来确定曲线的走向。由于其由法国工程师皮埃尔·贝塞尔广泛推广,因此这种曲线被命名为贝塞尔曲线。
138 0
|
人工智能 文字识别 小程序
千万创业者的自白:踩过坑才明白这些真相
在轰轰烈烈的创业大潮中,市场竞争指数也急速上升,今年1月至9月,中国初创企业的融资额较上年同期下降了46%。在竞争如此激烈的大环境下,唯有更加高效、高质的数字化办公,才是企业突出重围的不二法门。尤其是对中小企业来说,必须时刻保持业务创新,灵活应对市场需求,才能在瞬息万变的数字经济时代中生存下来,并战胜其他竞争对手。
千万创业者的自白:踩过坑才明白这些真相
|
人工智能 文字识别 小程序
千万创业者的自白:踩过坑才明白这些真相!
阿里云企业应用中心是中小企业通向成功的“独门秘籍”:美式快餐店“乐可斯”通过阿里云多端小程序自建点餐平台,沉淀了大批忠实用户,节省了15%-20%的第三方费用,翻台率提升近一半;2019年双11期间,阿里云企业应用中心为商标、工商注册、域名注册等提供了百万次服务......
1548 0
千万创业者的自白:踩过坑才明白这些真相!
|
Java 程序员 Spring
Java开发程序员遇危机,才31竟遭公司嫌弃,网友:还拿着6k等死?
程序员会有中年危机,一个很大的因素来自:我们曾经引以为傲、赖以生存的开发技术会被淘汰。而学习新开发技术成本太高。看着快速崛起的年轻人,不免使人心生:廉颇老矣的感慨。
1164 0

相关实验场景

更多