» 引用百度解釋: 語法糖(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語法