學習Linq以前必須知道的幾種語法糖

     » 引用百度解釋: 語法糖(Syntactic sugar),也譯爲糖衣語法,是由英國計算機科學家彼得·約翰·蘭達(Peter J. Landin)發明的一個術語,指計算機語言中添加的某種語法,這種語法對語言的功能並無影響,可是更方便程序員使用。一般來講使用語法糖可以增長程序的可讀性,從而減小程序代碼出錯的機會。   html

      » 用一句話來簡單描述:給咱們帶來方便的快捷寫法,編譯器會幫咱們作轉換,並且能夠提升開發編碼的效率,在性能上也不會帶來損失程序員

      » c#有不少種語法糖,接下來主要來說一下與Linq有關的一些語法糖(Lambda表達、自動屬性、擴展方法、var、對象或集合初始化器、匿名類等)c#

      一、Lambda表達式已經在上上一篇單獨講過它的演變由來https://www.cnblogs.com/lxshwyan/p/10815138.html函數

      二、擴展方法在上一篇分三個部分講過(在C#3.0以前沒有擴展方法的狀態(或者你不會使用不知道擴展方法的時候)、擴展方法的語法及怎麼使用、怎麼正確的使用擴展方法https://www.cnblogs.com/lxshwyan/p/10815731.html 性能

      三、自動屬性學習

       以前咱們封裝屬性快捷鍵:Ctrl+R+E =>彈出封裝好的屬性
編碼

       自動屬性快捷鍵:輸入字母 PROP+按兩次Tab      spa

        /// <summary>
        /// 封裝屬性
        /// </summary>
        private string _userName;
        public string UserName
        {
            get { return _userName; }
            set { _userName = value; }
        }
        /// <summary>
        /// 自動屬性
        /// </summary>
        public string Password { get;  set; }

   自動屬性和封裝屬性相比沒有從功能上沒有區別,也能對set或get屬性進行訪問控制  code

/// <summary>
        /// 封裝屬性
        /// </summary>
        private string _userName;
        public string UserName
        {
            get { return _userName; }
            protected  set { _userName = value; }
        }
        /// <summary>
        /// 自動屬性
        /// </summary>
        public string Password { get; protected set; }

    四、對象初始化器({})htm

          以前咱們對一個對象賦賦初始值的時候必須這樣寫

            UserInfo user1 = new UserInfo();
            user1.UserName = "lxsh";
            user1.PassWord = "123456";
            user1.Age = 25;
            user1.Gender = 1;

   如今使用對象初始化器後,能夠這樣寫,但使用對象初始化器的對象必須有一個無參的構造函數

    //屬性以前必須用逗號隔開,最後一個逗號能夠省略        
UserInfo user2 = new UserInfo() { UserName = "lxsh", PassWord = "123456", Age = 25, Gender = 1, };

   五、集合初始化器和對象初始化器相似({})

  //以前咱們使用集合對集合給初始化值的時候,只能一個一個add
            List<UserInfo> userInfos1 = new List<UserInfo>();
            userInfos1.Add(new UserInfo() { UserName = "lxsh" });
            userInfos1.Add(new UserInfo() { UserName = "wy" });
            userInfos1.Add(new UserInfo() { UserName = "ly" });

            //如今使用集合初始化器的,能夠沒必要聲明定義單個對象
            List<UserInfo> userInfos2 = new List<UserInfo>()
            {
                new UserInfo() { UserName = "lxsh" },
                new UserInfo() { UserName = "wy" },
                new UserInfo() { UserName = "ly" } 
            };

  六、匿名類型(Var)

          C#var和JS裏面var含義不同,它有如下幾個特色:

          √ 它必須是定義的時候必須初始化值,否則會報錯(不能其餘類型同樣先定義後賦值)

          √ 一旦初始化值後,它已經隱使推導出該變量類型,不能再給他賦值其餘類型的值

          它是局部變量,不能有public等其餘訪問修飾符

          √ 它相似object,但不一樣於object;它在效率上和使用強類型方式定義變量徹底同樣

               var i=0;與int i=0;其實就是同樣,編譯器自動會把var i=0變成int i=0(因此它在編譯過程當中轉換的,沒有裝箱拆箱的過程,和object不同)

        七、匿名類new{}

           匿名類在linq選擇指定類型返回數據 select new { Name = "lxsh" + s.StudentName, Age = s.Age } 及與返回接收匿名類型var常常會一塊兒使用

     簡單講有時咱們須要相似上面返回的數據,在之前若是沒有匿名類咱們只能單獨定義一個類來封裝Name、Age的屬性類,來接收這些數據,但這樣類型數據咱們可能只在當前程序中使用,不須要項目間重用,只在這一個地方使用, 單獨定義一個類顯然比較麻煩,若是咱們想增長屬性還得再去修改該類,這樣顯然比較麻煩,影響效率;

     如今有了匿名類型,咱們就不須要單獨定義一個類來封裝咱們想要的屬性;

 var student = new { name = "lxsh", age = 18 };
            Console.WriteLine(student.name);
            Console.WriteLine(student.age);

 當咱們想對student多加一個性別屬性時 只須要簡單修改就能夠

var student = new { name = "lxsh", age = 18,gender=1 };
            Console.WriteLine(student.name);
            Console.WriteLine(student.age);
            Console.WriteLine(student.gender);

    八、內置泛型委託Action<T>(不能有返回值)

     Action一共有16種泛型委託,從一個參數到16個參數的無返回值委託

    九、內置泛型委託Func<T>(有返回值) 

       Func一共有16種泛型委託,從一個參數到16個參數的有返回值委託 

  Action<T>、Func<T>其實就是C#幫咱們封裝了有返回值和無返回值的委託類型,咱們不須要單獨去定義委託類型,用的時候只需實例化就能夠 ,在這之前咱們每次用委託還要單獨去建立委託類型, 

 -------瞭解了以上知識接下來我和你們一塊兒來學習一下Linq語法

相關文章
相關標籤/搜索