どちらがより正しいですか?カークのコメントが示唆するように:それは依存します。デフォルトが合理的でない場合null
は、論理的に意味のある場合もあれば、例外の方が適している場合もあります。私がやろうとしていることの 1 つは、「GetCurrentItem
論理的な失敗を呼び出すことですか、それとも安全なことを呼び出すことですか?」ということです。
何もないときに呼び出しに失敗した場合はGetCurrentItem
、例外をスローするのが正しいコースです。たとえば、コレクションにHasCurrent
orIsEmpty
プロパティがあり、誰かが を呼び出す前に結果を調べることができるGetCurrentItem
場合、彼らは「よく知っている」必要があります。しかし、現在のアイテムがnull
クラスを使用する正しい論理的な方法である場合は、必ずそのように設計してください。いずれにせよ、ユーザーに予想される動作を知らせるために、コード コメントに動作を記録します。
ただし、例外を公開すると、ArgumentOutOfRange
実装の詳細が流出する可能性があります。つまり、このクラスのユーザーが内部構造が配列またはList<T>
であることを認識していない場合、その例外をブリードアウトせず、キャッチしてラップし、より意味のあるもの (カスタム、または のようなものInvalidOperationException
)をスローします。 .
実際には引数を直接渡していないため、ArgumentOutOfRange
例外を取得すると混乱する可能性があります:-)