如果你问程序员在编写程序时他们是否喜欢打字,那么通常的答案是“少!”。如果你问他们是否喜欢更多或更少的错误,通常的答案是“更少!” 这些是相互矛盾的目标。
As New 语法长期以来一直是 VB.NET 的一部分。然而,它确实附带了字符串,您完全将其留给运行时来确定是否应该创建一个新对象。那确实是一个错误生成器。有时您确实想创建一个新对象,即使该变量已经分配。它也相当模棱两可,例如在这个片段中:
For ix As Integer = 0 To 42
Dim q As New Queue(Of Integer)
'' etc...
Next
问题是:你得到一个队列的实例,在循环的第一遍中创建还是你得到了 43 个?程序员的真正意图是什么?从语法上看不是很清楚。
您忽略了第三种选择,而我更喜欢这种选择。从 VB9(又名 VS2008)开始可用,称为“类型推断”。您没有指定变量的类型,而是将其留给编译器来解决。该选项需要通过Option Infer On开启,默认开启。它结合了 As New 具有的缩写语法的优点,并且仍然允许您使用 New 语句在代码中显式创建对象:
Option Infer On
...
For ix As Integer = 0 To 42
Dim q = New Queue(Of Integer)
'' etc...
Next
其中 q 被编译器推断为 Queue 类型,并且很清楚代码生成了 43 个队列实例。C# 语言中的完全等价物是var关键字。