次のようなメソッドを呼び出していたとします。これは、2 つの例外のうちの 1 つだけをスローすることがわかっています。
public static void ExceptionDemo(string input)
{
if (input == null)
throw new ArgumentNullException("input");
if (input.Contains(","))
throw new ArgumentException("input cannot contain the comma character");
// ...
// ... Some really impressive code here
// ...
}
これを行うメソッドの実際の例は、Membership.GetUser (String)です。
メソッドを呼び出して例外を処理するには、次のうちどれを使用しますか。
方法 1 (最初に入力パラメーターを確認する)
public static void Example1(string input)
{
// validate the input first and make sure that the exceptions could never occur
// no [try/catch] required
if (input != null && !input.Contains(","))
{
ExceptionDemo(input);
}
else
{
Console.WriteLine("input cannot be null or contain the comma character");
}
}
方法 2 (呼び出しを try / catch でラップする)
public static void Example2(string input)
{
// try catch block with no validation of the input
try
{
ExceptionDemo(input);
}
catch (ArgumentNullException)
{
Console.WriteLine("input cannot be null");
}
catch (ArgumentException)
{
Console.WriteLine("input cannot contain the comma character");
}
}
私は何年にもわたって両方の方法を教えてきましたが、このシナリオの一般的なベスト プラクティスは何かを考えました。
更新
いくつかの投稿者は、これらの例外が処理される方法ではなく、例外をスローするメソッドに焦点を合わせていたため、同じように動作する .Net Framework メソッドの例を提供しました ( Membership.GetUser (String) )。私の質問を明確にするために、あなたが呼び出している場合Membership.GetUser(input)
、可能性のある例外、方法1、2、またはその他をどのように処理しますか?
ありがとう