淺談C# 匿名變量


每次寫博客,第一句話都是這樣的:程序員很苦逼,除了會寫程序,還得會寫博客!當然,希望將來的一天,某位老板看到此博客,給你的程序員職工加點薪資吧!因為程序員的世界除了苦逼就是沉默。我眼中的程序員大多都不愛說話,默默承受着編程的巨大壓力,除了技術上的交流外,他們不願意也不擅長和別人交流,更不樂意任何人走進他們的內心,他們常常一個人宅在家中!

閑話說多了,咱進入正題:

首先講解下匿名變量,在講解匿名變量之前,我先通過代碼展示匿名變量的聲明,如下:

 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

謝謝大家的支持!

@陳卧龍的博客

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM