0

我注意到这两个编译都没有任何编译器警告或错误,即使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#,只是想知道是否有充分的理由让一种方式优于另一种方式。我想这真的是个人选择。

4

4 回答 4

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
于 2010-06-10T14:34:31.093 回答
2

Option Infer是控制这个编译器功能的东西。两者都是等价的——这类似于(没有实际意义的)C# 关于是否使用var关键字的辩论。我的两分钱是留给个人开发人员,但是很多人可能会说建立一个约定并遵循它。

于 2010-06-10T14:34:36.087 回答
2

我会的Dim x As New Exception("this is a test")。两全其美,无需推断,但您仍然只需输入Exception一次 :)

于 2010-06-10T14:37:53.397 回答
0

我认为第一个(带有变量类型声明)将是最安全的使用。如果程序很小,它不会真正产生影响,但对于较大的程序,可能会有明显的编译器滞后。所以(在我看来)声明类型是最好的做法。

于 2010-06-10T14:47:18.403 回答