Linq查詢本質(zhì)簡(jiǎn)單分析
在向大家詳細(xì)介紹XX之前,首先讓大家了解下Linq查詢本質(zhì),包括介紹自動(dòng)屬性、初始化器和具有隱式類(lèi)型的局部變量。
本文的目的是幫助大家搞清楚C#3.0里面的Linq查詢表達(dá)式的來(lái)龍去脈,搞清楚以后對(duì)C#3.0的新特性基本上也就了然于胸了。建議大家看完Linq查詢后再看各個(gè)語(yǔ)法新特性對(duì)Linq的意義,這樣會(huì)更加有幫助一些。
1.自動(dòng)屬性
- class Class
- {
- //C#2.0 屬性
- //private int _id;
- //public int ID
- //{
- //get {
- //return _id;
- //}
- //set
- //{
- //_id = value;
- //}
- //}
- //C#3.0 屬性 可以給get set加訪問(wèn)修飾符
- public int ID { get; private set; }
- public string Name { get; set; }
- public Class(int id)
- {
- //加了private之后的屬性只能在類(lèi)的內(nèi)部訪問(wèn)
- this.ID = id;
- }
- }
Linq查詢本質(zhì):和原來(lái)的屬性沒(méi)啥兩樣 ,簡(jiǎn)化了語(yǔ)法而已。
2.初始化器
- private static void Initializer()
- {
- //C#2.0 對(duì)象初始化
- //Class c = new Class(1);
- //c.Name = "***一班";
- //C#3.0 對(duì)象初始化器
- Class c = new Class(1) { Name = "***一班" };
- //C#2.0 集合初始化
- //ClassCollection list = new ClassCollection();
- //list.Add(c);
- //C#3.0 集合初始化器
- ClassCollection list = new ClassCollection
- {
- new Class(1) { Name="***一班"},
- new Class(2){Name="***二班"}
- };
- foreach (Class item in list)
- {
- Console.WriteLine(item.ID + " " + item.Name);
- }
- }
Linq查詢本質(zhì):和原來(lái)的構(gòu)造函數(shù)初始化或構(gòu)造后通過(guò)屬性初始化沒(méi)啥兩樣 ,簡(jiǎn)化了語(yǔ)法而已。
3.具有隱式類(lèi)型的局部變量
- private static void Var()
- {
- var i = 1;
- // 編譯過(guò)后的結(jié)果實(shí)際是 int i=1;
- var并不是動(dòng)態(tài)變量,它的類(lèi)型實(shí)際上是c#編譯器通過(guò)上下文推斷是int
- //var i = DateTime.Now;
- //編譯不過(guò),和JavaScript不一樣
- var d = DateTime.Now;
- //=后面支持各種類(lèi)型
- var a = new int[] { 1, 2, 3 };
- //var也支持?jǐn)?shù)組
- foreach (var item in a)
- //item的類(lèi)型通過(guò)C#編譯器推斷得知是int
- {
- Console.WriteLine(i);
- }
- //var x;
- // 錯(cuò)誤,沒(méi)有用來(lái)推斷類(lèi)型的初始化器
- //var y = { 1, 2, 3 };
- // 錯(cuò)誤,不允許使用集合初始化器
- //var z = null;
- // 錯(cuò)誤,不允許出現(xiàn)空類(lèi)型
- }
Linq查詢本質(zhì):var并非動(dòng)態(tài)類(lèi)型 ,C#仍然是靜態(tài)語(yǔ)言,引入var方便我們寫(xiě)代碼了,可以不管“=”后面的賦值表達(dá)式類(lèi)型了,由編譯器自己去推斷生成對(duì)應(yīng)類(lèi)型了。
【編輯推薦】

















