大家可以看到在VS編輯器的智能提示中,編譯器已經找到了變量的實際類型。這個特性在結合LINQ語言進行數據查詢時顯得格外有用:
比如我們現在有一個UserInfo類,它包含了一個用戶的許多信息,姓名,年齡,住址等等。
class UserInfo
{
public string firstname;
public string lastname;
public int age;
public string address;
//...
}
我們現在要根據年齡對數據進行一些檢索,但我們希望檢索結果只需要包含用戶的姓名就夠了,也就是firstname,和lastname這兩個字段。這時候,匿名方法就可以派上用場了。
var result = from userinfo in infoList
where userinfo.age > 20 && userinfo.age < 35
select new { userinfo.firstname, userinfo.lastname };
大家可以看到,我們並沒有返回UserInfo的整個類型,而是返回了一個只包含firstname和lastname的數據類型,編譯器能夠自動為我們識別出result的類型。下面我們只需要一個foreach語句就可以把數據打印出來。
foreach (var var_info in result)
{
Console.WriteLine(var_info.firstname + " " + var_info.lastname);
}
這裡也同樣用到了匿名類型(var var_info),下面這張圖可以看出編譯器可以識別出var_info的實際型別。
有些文章在介紹C#3.0特性時會把它作為單獨的特性,但我覺得這個特性也是屬於編譯器自動探測類型的范疇,所以仍然將它歸類到匿名類型中來。