2011-03-18 37 views
3

每個人都在C#中使用Try-Catch。我知道。C#爲Try-Catch錯誤指定名稱

例如;

static void Main() 
    { 
     string s = null; // For demonstration purposes. 

     try 
     {    
      ProcessString(s); 
     } 

     catch (Exception e) 
     { 
      Console.WriteLine("{0} Exception caught.", e); 
     } 
    } 
} 

一切都好。

但是我怎樣才能爲特定錯誤指定名稱?

例如;

try 
{ 
    enter username; 
    enter E-Mail; 
} 
catch 
{ 

} 
  • 如果用戶名已存在,ErrorMessage - >(以下簡稱 「用戶名已經存在」)
  • IF E-Mail是已經存在,ErrorMessage - >( 「電子郵件是使用」 )

我該怎麼做C#

最好的問候,

Soner

+0

+1注意事項:) – Umer 2011-03-18 07:45:17

+3

檢查名稱是否已存在不應引發異常IMO。 – 2011-03-18 07:46:23

+0

做的說明打算,我們可以放心地忽略這個問題! – V4Vendetta 2011-03-18 07:47:14

回答

6
if(UserNameAlreadyExists(username)) 
{ 
    throw new Exception("Username already exists"); 
} 
if(EmailAlreadyExists(email)) 
{ 
    throw new Exception("Email already exists"); 
} 

這將回答你的問題。

但是異常處理不是用來執行那些檢查。例外是昂貴的,並且適用於您無法從錯誤中恢復的特殊情況。

3

當你拋出異常,您可以指定信息給他們:

throw new Exception("The username already exists"); 

但我不認爲你應該在這裏拋出異常,因爲您的應用程序將要預計輸入導致這些錯誤;他們不是例外條件。也許你應該使用驗證器或其他類型的處理程序。

+0

如何與ASP.NET Validators一起使用「throw new ..」? – 2011-03-18 12:39:08

+0

@Soner:你沒有。 – BoltClock 2011-03-18 12:40:49

1

你可以做這樣的事情:

if (UsernameAlreadyExcists(username)) 
{ 
    throw new Exception("The Username Already Exist"); 
} 
2
try 
{ 
    if (username exists) 
    { 
     throw new Exception("The Username Already Exist"); 
    } 

    if (e-mail exists) 
    { 
     throw new Exception("The E-Mail Already Exist"); 
    } 
} 
catch(Exception ex) 
{ 
    Console.WriteLine("The Error is{0}", ex.Message); 
} 
2

我認爲所有這些答案都對這個問題的一個點,但如果你在未來的某個時刻每異常要不同的處理,你會做到這一點,如下所示:

下一個例子假設你有兩個不同的異常實施

try 
{ 
    if user name is exit 
    { 
     throw new UserNameExistsException("The Username Already Exist"); 
    } 

    if e-mail is already exit 
    { 
     throw new EmailExistsException("The E-Mail Already Exist"); 
    } 
} 
catch(UserNameExistsException ex) 
{ 
    //Username specific handling 
} 
catch(EmailExistsException ex) 
{ 
    //EMail specific handling 
} 
catch(Exception ex) 
{ 
    //All other exceptions come here! 
    Console.WriteLine("The Error is{0}", ex.Message); 
} 
+0

+1不會錯過這一點。 OP的問題本身並不完全清楚..他是否想要自定義錯誤消息或每個錯誤類型的自定義catch塊 – gideon 2011-03-18 07:57:26

1

在C#中,可以創建我們自己的異常類。但Exception必須是C#中所有異常的最終基類。所以用戶定義的異常類必須從Exception類或它的一個標準派生類繼承。

using System; 
class MyException : Exception 
{ 
    public MyException(string str) 
    { 
    Console.WriteLine("User defined exception"); 
    } 
} 
class MyClass 
{ 
    public static void Main() 
    { 
    try 
    { 
     throw new MyException("user exception"); 
    } 
    catch(Exception e) 
    { 
     Console.WriteLine("Exception caught here" + e.ToString()); 
    }  
    } 
} 

您可以拋出這些異常並將它們捕捉到您的應用程序中的任何地方,但我不會在這種情況下使用異常。