2012-02-23 65 views
1

LINQ中的FirstOrDefault() and FirstOrDefault<string>()有什麼區別?LINQ中FirstOrDefault()和FirstOrDefault之間的差異<string>()LINQ

有人能給我一些簡單的解釋嗎?

TypedDataSet ds= codeComponent.GetAllCode("test"); 
string status = (from s in ds.Codes 
       where s.Name == "hello" 
       select s.Remarks).FirstOrDefault(); 


TypedDataSet ds= codeComponent.GetAllCode("test"); 
string status = (from s in ds.Codes 
       where s.Name == "hello" 
       select s.Remarks).FirstOrDefault<string>(); 

回答

8

無語義差異;編譯器能夠從集合類型中推斷泛型參數。只是語法糖,讓我們的生活變得更簡單一些。

請注意,這不是特定於LINQ;該規範定義了何時可以推斷泛型參數以及何時不能推斷泛型參數。

+0

我喜歡,我們發佈幾乎相同的答案:) – 2012-02-23 01:49:27

+0

@DBM:是的...我喜歡簡單的:D – 2012-02-23 01:49:45

4

沒有區別。當你離開明確的<string>時,編譯器能夠推斷出類型。

2

C#3.0具有自動泛型推理,如果類型不明確,則不需要顯式類型。 看FirstOrDefault(),它是一個擴展方法(也C#3.0)的定義

public static TSource FirstOrDefault<TSource>(this IEnumerable<TSource> source); 

在你的情況下,假定備註字段/屬性是字符串類型,TSource可以推斷爲字符串。