說你打電話類似如下,你知道的方法只有永遠要扔的2個例外之一:最佳實踐
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");
}
}
我已經教過幾年這兩種方法,並想知道一般最佳的做法是這種情況。
更新 一些海報注重方法拋出這些異常,正在處理的異常,而不是辦法,所以我提供(Membership.GetUser (String)其行爲以同樣的方式一個.NET Framework方法的一個例子) 因此,爲了澄清我的問題,如果您打電話給Membership.GetUser(input)
,您將如何處理可能的例外情況,方法1,2或其他?
感謝
當然方法一例外是昂貴的,在這種情況下,你可以避開他們用一個簡單的檢查。 –
對於預期的程序行爲,不應該發生異常,只是爲了例外(這就是爲什麼他們被稱爲異常)的情況,而這些情況並不是預期的。 – helb