1

今日、私は興味深いジレンマに遭遇しました。情報を処理し、重複する値をチェックして、重複していない次の数値を返す関数があります。だから、私はこのようなものを持っています:

Public Function GetNextNonDuplicateNumber(NumberToCheck as Long) as Long

      //the non-duplicate the function will return
      Dim NonDuplicate as Long

      If CheckForDuplicate(NumberToCheck) = True Then
          Throw New DuplicateException()
      Else
          NonDuplicate = NumberToCheck
      End If

End Function

次に、関数の下部に、次のように、重複がなくなるまでインクリメントして重複を処理するcatchブロックがあります。

Catch ex as DuplicateException
   NonDuplicate = IncrementToNonDuplicateValue(NumberToCheck)
   Throw ex
   Return NonDuplicate
End Function

ご覧のとおり、例外を具体的に処理したいのですが、関数外の他のコードにアラートを送信したいので、終了時に例外をスローしたいと思います。

問題は、単にそれをスローすると、null値を使用して関数が終了することです。私try/catchは間違った方法を考えていますか、それともこれを回避する方法がありますか?

4

2 に答える 2

3

例外をキャッチして(IncrementToNonDuplicate ...を使用して)回復した場合、例外をスローする理由はもうありません。catchとendtryの間のコードは、ファイルやデータリーダーを再スローする場合は、閉じるなどのリソースをクリーンアップする必要があります。

NonDuplicate値と、関数のエラーに関する必要な情報を含む構造体を返すこともできます。もう1つの方法は、「無効な番号:あるべきです...」などの情報を含むカスタム例外をスローすることです。

于 2009-06-26T20:18:28.900 に答える
1

重複が見つかったかどうかを示すブール値を返し、値を更新できるように、参照によって渡されるパラメーターを変更できます。

Public Function GetNextNonDuplicateNumber(ByRef NonDupeNumber as Long) as Boolean
于 2009-06-26T21:26:19.073 に答える