1

たとえば、次のケースsでは、宣言時にインスタンス化することで実行時の null 例外の可能性を回避できます。たとえば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 は、「実行時に null 参照例外が発生する可能性がある」ことを教えてくれるほど賢いようです。これは、一部の有能なプロの開発者がこの警告を無視したことを意味します。これは、それが理由であるに違いないと私に思わせます。開発者はその後移動したので、彼らに尋ねることはできません。それは私が理解できない基本的なことかもしれません。よろしければ、これを理解するのを手伝ってください。(これについて疑問に思っているのは私だけではありません。)

4

1 に答える 1

1

変数を初期化しないとしますString。そして、いくつかの処理が行われます。Return最後に、ステートメントを介して返す決定的な値を取得することを期待しています。何らかの理由で実行パスの可能性を考慮するのを忘れた場合、VS は null 参照例外の可能性について警告します。それから、「ああ、どうしてそれを忘れたの?」と思うかもしれません。

たとえば、 a を単語Functionに変換する aがあるとIntegerします (実用的な用途は限られているため、デモ目的でのみ使用してください)。

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 を渡すと、この時点で例外が発生します。retString代わりに VS を聞くと、下線が引かれた警告に気付くでしょうReturn retString。したがって、コードを実行せずにこの問題を修正できます。

を初期化するとしますDim retString As String = ""。警告は表示されなくなり、この問題を解決するにはプログラムをデバッグする必要があります。プログラムの複雑さによっては、さらに多くの作業が必要になる場合があります。

結論 - 実行時ではなく、コンパイル時に問題を発見する方が常に良いです。

編集:変数の初期化を忘れることは、たとえばTryGetValueを使用する理由など、意図的なものである可能性があります。is passed uninitializedドキュメントによると、このメソッドの value 。ただし、VS はこれを認識しないため、明示的に に割り当てるまで警告を表示し続けますNothing

Dim retString As String = Nothing

したがって、これは VS に、はい、初期化されていないことはわかっていますが、この特定のシナリオでは意図的なものであることを伝える方法です。

于 2012-12-13T02:33:04.627 に答える