[英]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.