Linq 语句中的 Sucher 有什么意义

本文关键字:什么 Sucher 语句 Linq | 更新日期: 2023-09-27 18:36:25

许多语句(常见于 Linq 中)在编译或执行不需要时使用 TSource。为什么要指定 Ts?

例:

 List<int> list = new List<int>(5) { 0, 1, 2, 0, 3 };
 int x = list.Where<int>(i => i == 0).FirstOrDefault<int>();
 int y = list.Where(i => i == 0).FirstOrDefault();

这些陈述有何不同?

Linq 语句中的 Sucher 有什么意义

在这两个 LINQ 语句中,TSource类型都是必需的。

它只是在第一条语句中明确提供,并在第二条语句中隐式推断

在编译器无法推断类型的情况下,您可以指定TSource - 通常是在 lambda 嵌套且非常复杂的情况下。

此外,如果您希望使用 lamdba 中使用的超类型来执行操作。例如,您可以指定 Fruit 类型,而不是让它推断Apple Apple是否继承自 Fruit

最后,您可以选择指定(或不指定)TSource,只是为了使代码更具可读性 - 通过显式包含类型或删除冗余的类型重复。

通常它是完全多余的,没有任何真正的目的。我怀疑某些代码工具(如重构引擎)即使没有必要也会添加通用参数。

Resharper将这些标记为冗余,我通常会删除它们。他们不会添加有价值的信息,也不会(通常)记录重要的东西。

因为有时(我的意思是有时)如果我们不定义TSource那么它就无法从其用法中检测到其类型,即其 lambda 表达式。

有时如果我们不提供TSource,我们就不会收到此错误。

在您的情况下,如果我们不提供它也可以。