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>();
答案 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推断为字符串。