1

例如,可以通过在s声明时进行实例化来避免在以下情况下可能出现的运行时空异常。例如,Dim s as String = ""我们是否有理由允许运行时异常的可能性?s也许它没有意义""?这不是一个家庭作业问题。我只是好奇。

Public Function X() As String 
    Dim s as String 
    Dim sMethod As String = X 
    Try 
        Dim vowels() As String = {"a", "e", "i", "o", "u"}
        For Each vowel As String In vowels
            s = "0"
        Next
    Catch ex As Exception 
        Throw System.Exception(ex)
    End Try
    Return s 
End Function
  • 编辑抛出异常

Visual Studio 似乎足够聪明,可以告诉我们“运行时可能会导致空引用异常”。这意味着一些有能力的专业开发人员忽略了这个警告。这让我觉得这一定是有原因的。开发人员已经继续前进,所以我不能问他们。这可能是我无法理解的基本问题。如果你愿意,请帮助我理解这一点。(我不可能是唯一对此感到疑惑的人。)

4

1 回答 1

1

假设您没有初始化String变量。还有一些处理。最后,您希望获得一个确定的值,您可以通过Return语句返回该值。如果由于某种原因您忘记考虑可能的执行路径,VS 会警告您可能的空引用异常。然后你可能会想:“哦,是的,我怎么忘记了?”

例如,您有一个Function将 aInteger转换为单词的 a(实际用途有限,因此仅出于演示目的考虑):

Function ConvertIntToWord(a As Integer) As String
  Dim retString As String
  If a = 0
    retString = "Zero  "
  ElseIf a = 1
    retString = "One  " 
  End If
  Return retString
End Function

在以上几行中,您很不幸忘记了Else路径。然后假设您想对结果字符串进行进一步处理:

ConvertIntToWord(5).TrimEnd

将 5 作为参数传递,此时您将收到异常。如果您改为听 VS,您会注意到一个警告 -下划线retStringReturn retString因此,您可以在不运行代码的情况下解决此问题。

现在假设您初始化Dim retString As String = "". 您将不再看到警告,并且必须调试您的程序才能解决此问题。根据程序的复杂性,它可能需要更多的努力。

底线 - 在编译时发现问题总是比在运行时更好。

编辑:忘记初始化变量可能是故意的,例如为什么使用TryGetValueis passed uninitialized根据文档,对于此方法, value 。但是,VS 不知道这一点,因此它将继续显示警告,直到您将其明确分配给Nothing

Dim retString As String = Nothing

所以这是告诉 VS 的一种方式,是的,你知道它是未初始化的,但对于这个特定的场景,它是故意的。

于 2012-12-13T02:33:04.627 回答