2012-02-23 64 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可以推断为字符串。