C#探秘系列(四)——GetHashCode,ExpandoObject
這篇繼續(xù)分享下GetHashCode和ExpandoObject這兩個(gè)比較好玩的方法。
一:GetHashCode
從MSDN上可以看到的解釋是:用作特定類型的哈希函數(shù),也就是說(shuō)任何對(duì)象的實(shí)例都會(huì)有一個(gè)int32類型的HashCode,并且存放在FCL中的HashCollection中,廢話不說(shuō),看個(gè)例子:
從圖中可以看到,兩個(gè)類實(shí)例的hashcode不同,說(shuō)明二者不是同一個(gè)引用,也就有了不同的hashcode,利用這個(gè)特性,我們是不是可以生成一些隨機(jī)數(shù)字呢?
1:在for循環(huán)中用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都是偽隨機(jī)的,所以會(huì)出現(xiàn)一連串的數(shù)字重復(fù),那么我真的想要隨機(jī)數(shù)怎么辦呢?這時(shí)候就可以用HashCode試試了
2:for循環(huán)中的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();
}

不過(guò)我們看到,我們不斷的向托管推上仍垃圾,所以對(duì)GC還是有一定的性能開(kāi)銷的。
二:ExpandoObject
我們知道php,asp,js都是解釋性的語(yǔ)言,免去了編譯的煩惱,我去年做過(guò)半年的php,然后回歸C#,然后就會(huì)對(duì)C#的編譯特別的不爽,有時(shí)候一個(gè)solution一百多個(gè)dll,編譯都要10多分鐘,每周的發(fā)布日都會(huì)通過(guò)自動(dòng)化工具發(fā)布到生產(chǎn)環(huán)境,然而在到生產(chǎn)環(huán)境下前的各個(gè)環(huán)境中,都需要重新編譯,導(dǎo)致很多時(shí)間都耗費(fèi)在編譯上面去了,不過(guò)在C#4.0之后,我們通過(guò)動(dòng)態(tài)的特性,也能夠做到把C#當(dāng)作js來(lái)寫。比如這里的ExpandoObject類,我們可以通過(guò)后期綁定來(lái)向ExpandoObject動(dòng)態(tài)的追加一些屬性和方法,非常有意思。不過(guò)這里要注意的是一但開(kāi)了dynamic,編譯器也就不認(rèn)這些代碼了,也就實(shí)現(xiàn)了免編譯的功能。
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)文章
Windows 8 Metro用C#連接SQLite及創(chuàng)建數(shù)據(jù)庫(kù),數(shù)據(jù)表的增刪改查的實(shí)現(xiàn)
本篇文章小編為大家介紹,Windows 8 Metro用C#連接SQLite及創(chuàng)建數(shù)據(jù)庫(kù),數(shù)據(jù)表的增刪改查的實(shí)現(xiàn)。需要的朋友參考下2013-04-04
C#用ComboBox控件實(shí)現(xiàn)省與市的聯(lián)動(dòng)效果的方法
這篇文章主要介紹了C#用ComboBox控件實(shí)現(xiàn)省與市的聯(lián)動(dòng)效果的方法,較為詳細(xì)的分析了ComboBox控件的使用原理與相關(guān)技巧,需要的朋友可以參考下2015-01-01
C#8.0 中開(kāi)啟默認(rèn)接口實(shí)現(xiàn)方法
這篇文章主要介紹了C#8.0 中開(kāi)啟默認(rèn)接口實(shí)現(xiàn)方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧的相關(guān)資料2019-05-05
C#實(shí)現(xiàn)動(dòng)態(tài)創(chuàng)建接口并調(diào)用的實(shí)例
這篇文章介紹了C#實(shí)現(xiàn)動(dòng)態(tài)創(chuàng)建接口并調(diào)用,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-11-11
C#實(shí)現(xiàn)一個(gè)相當(dāng)全面的數(shù)據(jù)轉(zhuǎn)換工具類
這篇文章主要為大家介紹了如何使用C#編寫一個(gè)通用工具類DataConvert來(lái)進(jìn)行數(shù)據(jù)轉(zhuǎn)換,包括30+個(gè)數(shù)據(jù)類型轉(zhuǎn)換,需要的可以了解一下2025-03-03
C#使用TcpListener及TcpClient開(kāi)發(fā)一個(gè)簡(jiǎn)單的Chat工具實(shí)例
下面小編就為大家分享一篇C#使用TcpListener及TcpClient開(kāi)發(fā)一個(gè)簡(jiǎn)單的Chat工具實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2017-12-12
C#中DateTimePicker默認(rèn)值顯示為空的問(wèn)題
這篇文章主要介紹了C#中DateTimePicker默認(rèn)值顯示為空的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-06-06

