質問

私は今日興味深いジレンマに走りました。私は、重複しないで次の番号を返し、重複した値の情報とチェックを処理する機能を有しています。だから、私はこのようなものを持っています:

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
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top