2013-05-18 42 views
0

我有兩個單選按鈕供用戶選擇他們喜歡的電影類型。這只是一個示例程序,因爲我想更好地理解拋出異常。當用戶點擊顯示按鈕時,它會顯示他們在動作或喜劇中選擇的電影類型。如果沒有選擇,它會拋出一個異常,這是我可以弄清楚的最好方式,這是否正確的方向?RadioButtons和Throwing Exception

string selection; 
     try 
     { 
      if (radAction.Checked) 
      { 
       selection = radAction.Text; 
      } 
      else 
       if (radComedy.Checked) 
       { 
        selection = radComedy.Text; 
       } 

       else 
        throw new ArgumentNullException("Please Choose Movie Type"); 
      MessageBox.Show(selection); 
     } 

     catch(ArgumentNullException msg) 
     { 
      MessageBox.Show(msg.Message); 
     } 
+0

Msgbox是不夠的? – matzone

+0

這個例子不足以理解拋出異常。 – Guanxi

+0

@關西 - 我知道。我只是想知道如何捕捉單選按鈕沒有被選中。 –

回答

0

在您的方案中顯示錯誤消息並不是一個好習慣。使用try...catchthrow...Exception總會帶來性能損失。儘量避免儘量避免。請參考此SO post作進一步參考。

但是,如果你真的堅持try...catch然後創建自己的用戶定義的異常。

public class MovieSelectionNotFoundException : Exception 
{ 
    public MovieSelectionNotFoundException() 
    { 
    } 

    public MovieSelectionNotFoundException(string message) 
     : base(message) 
    { 
    } 

    public MovieSelectionNotFoundException(string message, Exception inner) 
     : base(message, inner) 
    { 
    } 
} 

而且你可以按照如下在代碼中使用這樣的:

string selection = string.Empty; 
try 
{ 
    if (radAction.Checked) 
    { 
     selection = radAction.Text; 
    } 
    else if (radComedy.Checked) 
    { 
     selection = radComedy.Text; 
    } 

    else 
     throw new MovieSelectionNotFoundException("Please Choose Movie Type"); 

    MessageBox.Show(selection); 
} 

catch (MovieSelectionNotFoundException msg) 
{ 
    MessageBox.Show(msg.Message); 
} 
+0

謝謝你,但我的要求特別要求嘗試,趕上,但感謝代碼。 –

+0

@CharlesWhitfield:我根據您的具體要求更新了我的答案。 –

+0

@ skumar-感謝此。非常感激 –

0

例外的是意外和例外情況。如果您知道案件,您應該控制該案件並避免使用例外情況。

my requirements specifically call for try, catch 

有一個try catch塊對於最壞的情況是一件好事,但你仍然可以滿足你的要求而不會引發異常。但是,如果能夠以簡單的條件控制案例,你是否真的需要拋出異常?

如果您確實需要拋出異常,您可以使用implement a custom exception或使用已在System.Exception下實施的異常。