私は概要と説明を知っています。InvalidOperationExceptionとArgumentExceptionの比較
しかし、ARGUMENTがINVALID STATEの場合はどうなりますか?
InvalidOperationExceptionのドキュメントでは、メソッドが呼び出されたオブジェクト自体が無効な状態になっている必要があるため、ArgumentExceptionが適切だと思います。
私は概要と説明を知っています。InvalidOperationExceptionとArgumentExceptionの比較
しかし、ARGUMENTがINVALID STATEの場合はどうなりますか?
InvalidOperationExceptionのドキュメントでは、メソッドが呼び出されたオブジェクト自体が無効な状態になっている必要があるため、ArgumentExceptionが適切だと思います。
ドキュメントはかなり明確にそれを言う: メソッドを呼び出すための失敗が理由の無効な引数以外他によって引き起こされたとき
と、InvalidOperationExceptionを例に使用されています。メソッド呼び出しの失敗が無効な引数によるものであれば
...
は、その後、 ArgumentExceptionがまたはその派生クラス、例外ArgumentNullException または例外ArgumentOutOfRangeExceptionの一つは、代わりにスローされなければなりません。
あなたのメソッドは、引数が特定の状態にあることを期待しています。これには、引数の型自体で定義されている "有効な状態"を含むものが含まれます。
私は違いの主なポイントは、問題の原因だと思う:
それはあなたがメソッドを呼び出す引数またはオブジェクトですか?
例が不足している可能性があります。
ArgumentException
:例では、関数に渡される引数が無効であるため、例外が発生する可能性があります。この種の例外は、特定の場合に理想的な防御機構を使用して適切に処理されます。
InvalidOperationException
例:列挙子が強制的に実行されている間にコレクションを変更すると、操作が無効になります。
あまりにもローカライズされています...実際のユーザーはそれについて気にしません...あなたがそれから作るものが重要なので、純粋な味です... –