3

予想されるカスタム属性が見つからない場合にスローする適切なタイプの例外を選択するのに問題があります (既存の .NET 例外のいずれかを使用することをお勧めします)。

この場合、何をお勧めしますか?前もって感謝します。

編集:

ここで彼のコンテキスト:

[<ExpectedAttribute()>]
let foo args ... = ...

関数foo(ユーザー定義) がランタイム エンジンに渡されます。カスタム属性が存在しない場合、ランタイムは例外をスローする必要があります。

4

3 に答える 3

4

カスタム属性が欠落している場合、System例外に適合しません。

システム例外を使用できますが、ここでのドメインは何ですか? そして、どのような契約が破られていますか?これがシリアライゼーションに関するものなのか、テストに関するものなのか、それとも...


追加後、編集しますfoo。システム例外に最も近いのは System.ArgumentException です。これは、エンジンが要件を満たしていないパラメーターを受け取っているためです。

しかし、私は独自のMissingExpectedAttribute例外を定義します。

于 2010-08-15T12:31:22.487 に答える
3

「InvalidOperationException」や「InvalidArgumentException」のような一般的なものを提案し、予想される属性の詳細をメッセージに記載します。

于 2010-08-15T12:35:23.990 に答える
1

呼び出されたコンストラクター、メソッド、またはプロパティに規則違反オブジェクトが指定された場合、ArgumentException. ルール違反オブジェクトが前の操作の状態の一部であり、この属性が存在することを主張するメソッドまたはプロパティが呼び出された場合、InvalidOperation.

于 2010-08-15T12:35:58.730 に答える