c#datagridview绑定对象的对象_挖一挖C#中那些我们不常用的东西之系列(4)——GetHashCode,ExpandoObject...

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

一:GetHashCode

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

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

7e2e188a406639da3b36291e17ee5126.png

从图中可以看到,两个类实例的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         }

2d33bb9df4cac85ac70ea670f6d6319a.png

我们知道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         }

83d9fa50d46fb203e0aae01e03b1e280.png

不过我们看到,我们不断的向托管推上仍垃圾,所以对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         }

de43cc6ed881c54e2ba4475edac5c8f8.png

作者:一线码农

原文地址:

https://www.cnblogs.com/huangxincheng/p/3726881.html

4eee8fb7585b9d96ee382e8d562bb0b0.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值