キャッチ、ハンドル、その後、再スロー例外?
-
20-08-2019 - |
質問
私は今日興味深いジレンマに走りました。私は、重複しないで次の番号を返し、重複した値の情報とチェックを処理する機能を有しています。だから、私はこのようなものを持っています:
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
間違った方法を考えて、またはこれを回避する方法はありますでしょうか?
解決
あなたは、例外をキャッチし、それから回復した場合は(あなたのIncrementToNonDuplicateで...)そして、もう例外をスローする理由はありません。キャッチとエンド試し間のコードは、ちょうどあなたがそれを再スローする場合は、ファイルやDataReaderを閉じるなどのリソースをクリーンアップする必要があります。
あなたはかなり重複しない値と関数内のエラーに関する必要な情報を含む構造体を返すことができます。 その他の方法は、無効な番号」などの情報が含まれていますカスタム例外をスローすることです:それはする必要があります...)
他のヒント
あなたは重複が見つかったかどうかを示すbooleanを返し、あなたが値を更新することができますので、参照によって渡されるパラメータを変更することができます。
Public Function GetNextNonDuplicateNumber(ByRef NonDupeNumber as Long) as Boolean
所属していません StackOverflow