私は最近、例外とその使用に関するベスト プラクティスを調べ始めました。
複数の引数を持つメソッドがあるとします。また、このメソッドには、パラメーターが少ない複数のオーバーロードがあり、デフォルト値を提供してメインの実装を呼び出します。
すべてのオーバーロードですべての引数を検証しますか?
public string Translate(string text)
{
if (String.IsNullOrEmpty(text))
throw new ArgumentNullException();
return Translate(text, "english");
}
public string Translate(string text, string language)
{
if (String.IsNullOrEmpty(text))
throw new ArgumentNullException();
// Do the rest of the work
// ...
}
例外を再スローしますか?
public string Translate(string text)
{
try
{
return Translate(text, "english");
}
catch
{
throw;
}
}
public string Translate(string text, string language)
{
if (String.IsNullOrEmpty(text))
throw new ArgumentNullException();
// Do the rest of the work
// ...
}
または、オーバーロードで例外と try/catch ブロックを完全に削除する必要がありますか?
public string Translate(string text)
{
return Translate(text, "english");
}
public string Translate(string text, string language)
{
if (String.IsNullOrEmpty(text))
throw new ArgumentNullException();
// Do the rest of the work
// ...
}
また、2 つのメソッドのドキュメントはどのようになりますか?
(C# XML コメントを使用します。特に<exception>
要素を配置する場所。)
これはマイナーなトピックであることは認識していますが、この種の状況に遭遇するたびに不思議に思っています (実際にはかなり頻繁に発生します)。