繁体   English   中英

非泛型类型中的通用方法

[英]Generic methods in non-generic types

当你有一个方法,如:

public static T DoSomething<T> ( params T [ ] input )

C#允许您在不指定T的情况下调用它,如:

DoClass.DoSomething ( "1", "2", "3" );

编译器是否根据传递给它的方法计算出T?

这是一个很好的约定(在这种情况下省略T)?

是的,编译器可以在大多数情况下推断泛型类型参数。 (除非是你的类型是lambda表达式,如果我没记错的话。)

通常认为在推断出通用参数时省略通用参数是非常好的做法。 事实上,我会说它增加了一定的可读性(指定它们通常是多余的)。

是的,编译器通常会找出类型。 它被称为“类型推断”。

是的,将T留在呼叫站点是最佳做法。 您编写的代码越少,以后需要阅读和理解的代码越少。

如果你有ReSharper ,那么它会很好地向你展示你可以去哪里,并且无法通过移除呼叫站点来逃脱。 否则你可以尝试将其取出,如果代码编译,那么你不需要它。

是的,当编译器能够确定T应该是什么时,指定它是多余的。 我发现这是一个很棒的功能,因为当类型名称总是列出时(特别是长名称),它会变得乏味且难以阅读。

正如许多人所提到的,这是由于编译器的泛型参数类型推断。 它通过第一个参数直接发现类型。

另一件事 - 如果您阅读.net库的设计指南,实际上建议您以可以推断类型的方式编写所有通用方法。 根据设计指南书,不可推理的通用方法被认为更难理解,应尽可能避免。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM