初始化列表或队列或堆栈或类似的东西时,首选哪种方法?
Dim q as Queue(Of Integer) = New Queue(Of Integer)
或
Dim q as New Queue(Of Integer)
另外,我已经开始使用New作为字符串和整数变量 - 这是愚蠢的吗?使用New是否有任何缺点,而不仅仅是将变量设置为默认设置? E.g。
Dim Num1 As New Integer
Dim Str1 As New String("")
Dim Bool1 As New Boolean
谢谢!
答案 0 :(得分:2)
如果你问程序员在编写程序时是否喜欢打字或多或少,那么通常的答案就是“少了!”。如果你问他们是否喜欢或多或少的错误,通常的答案是“少!”那些是相互冲突的目标。
As New语法已经成为VB.NET的一部分很长一段时间了。但它确实附带了字符串,您将它完全留给运行时来确定是否应该创建一个新对象。这确实是一个bug生成器。有时您确实想要创建一个新对象,即使已经分配了该变量。在这个片段中,它也很模糊,例如:
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 关键字。