最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2014年05月14日 09:25:11   作者:  
這篇繼續(xù)分享下GetHashCode和ExpandoObject這兩個(gè)比較好玩的方法。

這篇繼續(xù)分享下GetHashCode和ExpandoObject這兩個(gè)比較好玩的方法。

一:GetHashCode

  從MSDN上可以看到的解釋是:用作特定類型的哈希函數(shù),也就是說任何對(duì)象的實(shí)例都會(huì)有一個(gè)int32類型的HashCode,并且存放在FCL中的HashCollection中,廢話不說,看個(gè)例子:


從圖中可以看到,兩個(gè)類實(shí)例的hashcode不同,說明二者不是同一個(gè)引用,也就有了不同的hashcode,利用這個(gè)特性,我們是不是可以生成一些隨機(jī)數(shù)字呢?

1:在for循環(huán)中用random生成。

復(fù)制代碼 代碼如下:

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都是偽隨機(jī)的,所以會(huì)出現(xiàn)一連串的數(shù)字重復(fù),那么我真的想要隨機(jī)數(shù)怎么辦呢?這時(shí)候就可以用HashCode試試了

2:for循環(huán)中的hashcode

復(fù)制代碼 代碼如下:

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

不過我們看到,我們不斷的向托管推上仍垃圾,所以對(duì)GC還是有一定的性能開銷的。

二:ExpandoObject

     我們知道php,asp,js都是解釋性的語言,免去了編譯的煩惱,我去年做過半年的php,然后回歸C#,然后就會(huì)對(duì)C#的編譯特別的不爽,有時(shí)候一個(gè)solution一百多個(gè)dll,編譯都要10多分鐘,每周的發(fā)布日都會(huì)通過自動(dòng)化工具發(fā)布到生產(chǎn)環(huán)境,然而在到生產(chǎn)環(huán)境下前的各個(gè)環(huán)境中,都需要重新編譯,導(dǎo)致很多時(shí)間都耗費(fèi)在編譯上面去了,不過在C#4.0之后,我們通過動(dòng)態(tài)的特性,也能夠做到把C#當(dāng)作js來寫。比如這里的ExpandoObject類,我們可以通過后期綁定來向ExpandoObject動(dòng)態(tài)的追加一些屬性和方法,非常有意思。不過這里要注意的是一但開了dynamic,編譯器也就不認(rèn)這些代碼了,也就實(shí)現(xiàn)了免編譯的功能。

復(fù)制代碼 代碼如下:

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



相關(guān)文章

最新評(píng)論

洛隆县| 侯马市| 博乐市| 九龙城区| 阿拉善左旗| 营口市| 清徐县| 沁阳市| 闻喜县| 攀枝花市| 南投市| 五原县| 龙南县| 卢湾区| 咸阳市| 保靖县| 宜宾县| 乌海市| 昌平区| 庆云县| 光山县| 康乐县| 沾益县| 自贡市| 西宁市| 仲巴县| 康乐县| 托克逊县| 文登市| 塔城市| 桂林市| 博湖县| 诸暨市| 东光县| 铜山县| 波密县| 二手房| 镇宁| 镇安县| 平阴县| 古交市|