私は例外を投げるか、例えばContract.Requires<TException>
例外と例外のスロー。<T>?
を呼ぶべきかどうか迷っています:
public static void Function(String str)
{
if (str == null) throw new ArgumentNullException("str", "Input string cannot be null.");
// ...
}
public static void Function(String str)
{
Contract.Requires<ArgumentNullException>(str != null, "Input string cannot be null.");
// ...
}
対Contract.Requires<TException>
がCONTRACTS_FULL
シンボルを必要としないので、私はそれを維持することができます私のリリースも構築されています。
これは私の考察です:
コン:あなたはカスタム例外型コンストラクタのオーバーロードされたバージョンを呼び出すことはできません。追加のパラメータをコンストラクタに渡す方法はありません。
プロ:静的ツールは、(たとえば、契約違反の呼び出し元に通知します)。
どのような状況で、どのような状況で使用する必要がありますか?
「例外タイプのコンストラクタをオーバーロードする」とすれば、どんな利点がありますか? –
@ PeterRitchie私は同じ理由でそれらのコンストラクタが存在すると仮定します。私はそれがより多くのデータ/情報を提供するので、私は推測する。 – MasterMastic
例外タイプのオーバーロードに関するご質問がありません。また、Contract.Requiresの使用法を誤解している可能性があります。そのオーバーロードを使用する場合は、リリースされたビットでツールを使用する必要があります。 CodeContractツールを使用してDLLを書き直さないと、期待したことができません。 –