我注意到这两个编译都没有任何编译器警告或错误,即使Option Strict
和Option Explicit
都打开了:
Dim x As Exception = New Exception("this is a test")
Dim y = New Exception("this is another test")
我的问题是,使用第一种方式(参见变量x)或第二种方式(参见变量y)更合适吗?我的猜测是VB不需要As
子句,因为变量正在初始化,因此编译器可以推断出类型。
我倾向于喜欢第一种方式,因为它只是“感觉”正确,并且与C#
之类的其他语言更加一致,只是想知道是否有一种方法比另一种更好。我想这真的是个人选择。
答案 0 :(得分:4)
看看Option Infer On的奇迹,编译器自动计算出“y”的类型。自VS2008起可用。您将通过关闭它来获得您正在寻找的错误:
Option Strict On
Option Infer Off
Module Module1
Sub Main()
Dim x As Exception = New Exception("this is a test")
Dim y = New Exception("this is another test") ''# error BC30209
Dim z As New Exception("this is a third test")
End Sub
End Module
答案 1 :(得分:2)
Option Infer
是控制此编译器功能的原因。两者都是等价的 - 这类似于关于是否使用var
关键字的(模拟)C#辩论。我的两分钱是留给个人开发者,但很多人可能会说要建立一个会议并遵循它。
答案 2 :(得分:2)
我做Dim x As New Exception("this is a test")
。两个世界中最好的,没有推断,但你仍然只需要输入Exception
一次:)
答案 3 :(得分:0)
我认为第一个(使用变量类型声明)将是最安全的。如果程序很小,它不会真正有所作为,但对于较大的程序,可能会有明显的编译器延迟。所以(在我看来)声明类型是最好的事情。