2

在初始化列表、队列、堆栈或任何类似的东西时,首选哪种方法?

Dim q as Queue(Of Integer) = New Queue(Of Integer)

或者

Dim q as New Queue(Of Integer)

另外,我已经开始对字符串和整数变量使用 New - 这很愚蠢吗?使用 New 而不仅仅是将变量设置为默认设置有什么缺点吗?例如

Dim Num1 As New Integer
Dim Str1 As New String("")
Dim Bool1 As New Boolean

谢谢!

4

1 回答 1

2

如果你问程序员在编写程序时他们是否喜欢打字,那么通常的答案是“少!”。如果你问他们是否喜欢更多或更少的错误,通常的答案是“更少!” 这些是相互矛盾的目标。

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关键字。

于 2013-06-02T14:29:15.430 回答