当前位置:  编程技术>.net/c#/asp.net

C#探秘系列(四)——GetHashCode,ExpandoObject

    来源: 互联网  发布时间:2014-10-30

    本文导语:  这篇继续分享下GetHashCode和ExpandoObject这两个比较好玩的方法。 一:GetHashCode   从MSDN上可以看到的解释是:用作特定类型的哈希函数,也就是说任何对象的实例都会有一个int32类型的HashCode,并且存放在FCL中的HashCollection中,...

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

一:GetHashCode

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


从图中可以看到,两个类实例的hashcode不同,说明二者不是同一个引用,也就有了不同的hashcode,利用这个特性,我们是不是可以生成一些随机数字呢?

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

代码如下:

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

            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();

            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,编译器也就不认这些代码了,也就实现了免编译的功能。

代码如下:

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();
        }




    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Android提高之TelephonyManager功能探秘
  • Android提高之蓝牙隐藏API探秘
  • Android开发笔记之探秘WebView


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3