6

コレクションであるプロパティ AssignedSoftware を持つ Asset オブジェクトがあります。

同じソフトウェアがアセットに複数回割り当てられていないことを確認したいと考えています。Add メソッドで、ソフトウェアが既に存在するかどうかを確認し、存在する場合は例外をスローします。

スローする必要がある標準の .NET 例外はありますか? または、ベスト プラクティスでは、独自のカスタム例外を作成する必要がありますか?

4

5 に答える 5

15

なぜInvalidOperationException答えとして受け入れられたのですか?! ? ArgumentException!

InvalidOperationExceptionメソッド/プロパティが呼び出されたオブジェクトが、初期化されていない状態などのためにリクエストに対処できない場合に使用する必要があります。ここでの問題は、追加されるオブジェクトではなく、オブジェクトに渡されるオブジェクトです(それはだまされています)。考えてみてください。この Add 呼び出しがまったく行われなかったとしても、オブジェクトは通常どおり機能します。はい!

これはArgumentExceptionである必要があります。

于 2008-09-11T05:31:17.457 に答える
9

同じキー値でアイテムをハッシュテーブルに2回追加しようとすると、.NetはSystem.ArgumentExceptionをスローするため、より具体的なものがあるようには見えません。より具体的なものが必要な場合は、独自の例外を作成することをお勧めします。

于 2008-09-10T17:42:59.347 に答える
5

基本ライブラリ クラスが行うことなので、おそらく ArgumentException をスローする必要があります。

于 2008-09-10T17:39:12.427 に答える
5

エラーに関するクラス ライブラリの設計ガイドライン ( http://msdn.microsoft.com/en-us/library/8ey5ey87(VS.71).aspx ) から:

ほとんどの場合、定義済みの例外タイプを使用します。クラス ライブラリのユーザーがこの新しい種類の例外をキャッチし、例外の種類自体に基づいてプログラムによるアクションを実行することが期待される、プログラムによるシナリオに対してのみ、新しい例外の種類を定義します。これは、パフォーマンスとメンテナンスに悪影響を与える例外文字列の解析に代わるものです。

...

無効なパラメーターが渡されるか検出された場合は、ArgumentException をスローするか、このクラスから派生した例外を作成します。

オブジェクトの現在の状態を考慮して、プロパティ セット アクセサーまたはメソッドの呼び出しが適切でない場合は、InvalidOperationException 例外をスローします。

これは「オブジェクトの状態が無効」なシ​​ナリオのように思えるので、ArgumentException よりも InvalidOperationException を選択します。パラメーターは有効ですが、オブジェクトのこの時点では有効ではありません。

于 2008-09-10T17:43:01.700 に答える
1

一意のアイテムを含むコレクションが本当に必要な場合は、HashSet オブジェクト(C# 3.0 で使用可能) を調べてみてください。

それ以外の場合は、次の 2 つの方法があります。

  • 述べたように、操作のカスタム例外を作成します
  • ブール値の結果を返す Add() メソッドを実装します。項目が追加された場合は true 、コレクション内に項目が既に重複している場合は false

どちらのアプローチも、一貫して使用している限り、ベスト プラクティスと見なすことができます。

于 2008-09-10T17:41:23.157 に答える