每次寫博客,第一句話都是這樣的:程序員很苦逼,除了會寫程序,還得會寫博客!當然,希望將來的一天,某位老板看到此博客,給你的程序員職工加點薪資吧!因為程序員的世界除了苦逼就是沉默。我眼中的程序員大多都不愛說話,默默承受着編程的巨大壓力,除了技術上的交流外,他們不願意也不擅長和別人交流,更不樂意任何人走進他們的內心,他們常常一個人宅在家中!
閑話說多了,咱進入正題:
首先講解下匿名變量,在講解匿名變量之前,我先通過代碼展示匿名變量的聲明,如下:
static void Main() { var A = 1;//在此,A會被解析為int類型 和 int A=1;是一模一樣滴 var AA = "";//AA會被解析為string類型 和 string AA="";是一模一樣滴 var AAA = new[] {1,2,3,4,5 };//AAA會被解析為int類型數組 和 int[]類型是一模一樣滴 var B = new { };//B會被解析為一個空的對象/集合,沒有什么屬性 和object B=new {};是一模一樣滴 var BB = new { userName = "Jack.Chen", Sex = "男", Age = 26, Address = "中國-蘇州" };//BB會被解析為一個擁有屬性的對象 和preson類型是一模一樣滴 var BBB = new[] { new preson { UserName = "Jack.Chen", Sex = "男", Age = 26, Address = "中國-蘇州" }, new preson { UserName = "Loose-Li", Sex = "女", Age = 25, Address = "中國-上海" }, new preson { UserName = "cathy", Sex = "女" } };//BBB會被解析為一個preson對象集合 和List<person>類型是一模一樣滴 }
class preson { string userName; public string UserName { get { return userName; } set { userName = value; } } string sex; public string Sex { get { return Sex; } set { Sex = value; } } int age; public int Age { get { return Age; } set { Age = value; } } string address; public string Address { get { return Address; } set { Address = value; } } }
上面的每行代碼,與每行代碼后面的注釋,起到的作用是完全一樣的
也就是說,在聲明一個變量(並且同時給它賦值)的時候,完全不用指定變量的類型,只要一個var就解決問題了
當然,有些人會問:這樣定義會降低程序的性能嗎?
可以負責任的告訴你,這樣寫不會影響性能!
上面的代碼和注釋里的代碼,編譯后產生的IL代碼(中間語言代碼)是完全一樣的(編譯器根據變量的值,推導出變量的類型,才產生的IL代碼)
那么使用匿名變量的優點是什么?
1)、在編程的過程中,我們常常會遇到這種情況,聲明變量或者接收變量的時候,我們預先不知道該變量的類型,通常,我們會把聲明的變量定義為:Object類型,畢竟Object類型是所有類型的祖先類型嘛!這樣寫程序無可厚非,系統編譯也能通過,也不會報任何錯誤!但是在C#語言中,類型的轉換往往會涉及到‘裝箱拆箱’操作,而,裝箱拆箱操作又會額外的增加系統開支,說白了就是使系統性能降低。
匿名變量的橫空出世解決了你的這個煩惱。
在我們不知道變量為何種類型時,我們可以把這個變量定義為:Var(也就是匿名變量),這樣系統會幫我們解析變量的類型。這樣,即解決了我們的煩惱,也不會出現裝箱拆箱,增加了系統的性能。
有人說:匿名類型是為懶人專門設計的一個變量類型,你這么說,我認為也是非常對的,畢竟使用匿名變量,我們再也不用考慮變量類型,而把這個艱巨的任務交給編譯器。啊哈哈,累死編譯器關我毛事!
2)、在foreach一個集合的時候,可以使用var關鍵字來代替書寫循環變量的類型,代碼如下:
protected void ForEach_Var() { List<preson> pres = new List<preson> { new preson { UserName = "Jack.Chen", Sex = "男", Age = 26, Address = "中國-蘇州" }, new preson { UserName = "Loose-Li", Sex = "女", Age = 25, Address = "中國-上海" }, new preson { UserName = "cathy", Sex = "女" } }; foreach (var P in pres) { Console.WriteLine(P.UserName); } }
3)、序列化和反序列化為JSON時很有用,代碼如下:
protected static void Json_var() { var BBB = new[] { new preson { UserName = "Jack.Chen", Sex = "男", Age = 26, Address = "中國-蘇州" }, new preson { UserName = "Loose-Li", Sex = "女", Age = 25, Address = "中國-上海" }, new preson { UserName = "cathy", Sex = "女" } };//BBB會被解析為一個preson對象集合 和List<person>類型是一模一樣滴 string Json = JsonConvert.SerializeObject(BBB);//將匿名變量轉化為JSON字符串 var DX = JsonConvert.DeserializeObject(Json);//將JSON字符串轉為JSON對象 Console.WriteLine(DX); }
輸出結果如下:
那么使用Var類型需要注意什么呢?
你不能用var關鍵字聲明一個變量而不給它賦值,因為編譯器無法推導出你這個變量是什么類型的。
至此:C#匿名變量的簡單介紹就講解完畢了!相信大家對C#匿名變量有所了解了吧!
當然:有了匿名變量,就會有匿名方法。要想了解匿名方法,就得從C#委托講起,至於C#委托和匿名方法我會在下一篇博客進行完成!敬請大家期待!在此,就不作講解了,急需了解的小虎斑們可以查看我的博客:有深到淺講解C#LINQ,網址為:http://www.cnblogs.com/chenwolong/p/LINQ.html
謝謝大家的支持!
@陳卧龍的博客