Linq隱式類型化局部變量
在向大家詳細介紹Linq隱式類型化局部變量之前,首先讓大家了解下編譯器推斷局部變量的類型,然后全面介紹。
Linq隱式類型化局部變量
還有另一種語言功能被稱為Linq隱式類型化局部變量(或簡稱為 var),它負責指示編譯器推斷局部變量的類型。例如:
- var integer = 1;
在此例中,整數(shù)具有 int 類型。請務(wù)必明白,這仍然是強類型。在動態(tài)語言中,整數(shù)的類型可在以后更改。為說明這一點,以下代碼不會成功編譯:
- var integer = 1;
- integer = “hello”;
C# 編譯器將報告第二行的錯誤,表明無法將字符串隱式轉(zhuǎn)換為 int。在上述查詢示例中,我們現(xiàn)在可以編寫完整的賦值,如下所示:
- var locals = customers.Where(c => c.ZipCode == 91822).Select(c => new {
FullName = c.FirstName + “ “ +c.LastName, HomeAddress = c.Address });
局部變量的類型最終成為 IEnumerable<?>,其中“?”是無法編寫的類型的名稱(因為它是匿名的)。
Linq隱式類型化局部變量只是:方法內(nèi)部的局部變量。它們無法超出方法、屬性、索引器或其他塊的邊界,因為該類型無法顯式聲明,而且“var”對于字段或參數(shù)類型而言是非法的。
事實證明,Linq隱式類型化局部變量在查詢的環(huán)境之外非常便利。例如,它有助于簡化復雜的通用實例化:
- var customerListLookup = new Dictionary<string, List<Customer>>();
現(xiàn)在我們的查詢?nèi)〉昧肆己眠M展;我們已經(jīng)接近理想的語法,而且我們是用通用語言功能來達成的。有趣的是,我們發(fā)現(xiàn),隨著越來越多的人使用過此語法,經(jīng)常會出現(xiàn)允許投影超越方法邊界的需求。如我們以前所看到的,這是可能的,只要從 Select 內(nèi)部調(diào)用對象的構(gòu)造函數(shù)來構(gòu)建對象即可。
【編輯推薦】