Linq之C#3.0語言擴展

爲了讓Linq的查詢語法更接近於C#和VB.NET, C# 3.0和VB.NET 9.0基於的模板、匿名方法和迭代器都是LINQ的重要組成部分,其中包括了以下的重要特性:
1.隱藏類型的本地變量
     C# 3.0提供了一個新的關鍵子var,這樣程序員就可以不需要明確的定義一個本地變量,而是由編譯器根據表達式來初始化該變量。比如: var name="Linq";通過該項特性,不再需要重複本地變量的類型,編譯器會自動的推動類型,同時支持強類型。而且可以省去在foreach循環中定義迭代器類型

2.對象初始化程序 
    該特性讓我們能夠在對象定義的時候就給相應的字段和屬性賦值.例如:
    class Person
    {
        ......
        public string Name { get; set; }
        public int Age { get; set; }
        public string Nation { get; set; }
        ......
    }
    通過該特性就可以在一句聲明語句中初始化該變量
    var linq = new Person { Name = "Linq", Age = "2", Nation = "USA" };
    對於集合也是一樣:
    ......
    var linqs = new List<Person>[]{
                new Person{Name="Linq to SQL",Age=1,Nation="USA"},
                new Person{Name="Linq to XML",Age=2,Nation="UK"},
                new Person{Name="Linq to DataSet",Age=3,Nation="GR"}
            };
    ......
    就類似於用Add方法添加對象。但是要注意必須是實現了IEnumerable接口和提供了Add方法的類.
3.Lambda表達式 
    linq            =>         linq.Age == 2
    (輸入參數)   (操作符)   (表達式或是聲明模塊)
    在沒有定義參數類型的情況下,輸入參數爲隱藏類型。當然可以定義具體類型,比如(Person linq)

4.擴展方法 
   其實最簡單的實現就是在第一個參數前加上this關鍵字。因爲this關鍵字指示編譯器把該方法作爲擴展方法對待。但是擴展方法必須是聲明在非模板靜態類。

5.匿名類
    其實匿名類只是沒有類型名稱而已,而實際的類型則由編譯器在創建時確定.例如:
  var linq=new{"SQL to Object",4,"CN"};
    該特性的好處是在快速返回簡單的臨時結果,有利於開發。但是也有它的侷限性在裏面。主要是不能夠利用強類型的方式進行類的操作,同時不能用作方法的返回值(除非該方法的返回值是Object類型)。還有就是在C#中匿名類是不可變的,也就是一旦創建就不能改變當中的屬性值。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章