LINQ </string>中FirstOrDefault()和FirstOrDefault <string>()之间的区别

时间:2012-02-23 01:45:17

标签: c# linq

LINQ中FirstOrDefault() and FirstOrDefault<string>()之间有什么区别?

有人可以给我一些简单的解释吗?

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>();

3 个答案:

答案 0 :(得分:8)

没有语义差异;编译器能够从集合的类型推断出泛型参数。只是语法糖,使我们的生活更简单。

请注意,这不是LINQ特有的;规范定义何时推断泛型参数以及何时不能推断。

答案 1 :(得分:4)

没有区别。当您不使用显式<string>时,编译器可以推断出类型。

答案 2 :(得分:2)

C#3.0具有自动通用推理,如果类型不明确,则不需要显式类型。 查看FirstOrDefault()的定义,它是一个扩展方法(也是C#3.0)

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

在您的情况下,假设备注字段/属性是字符串的类型,可以将TSource推断为字符串。