2017-03-01 104 views
0

我有以下代碼。只有1個捕獲異常可以嗎?這段代碼可以拋出什麼其他異常?異常處理默認catch異常

在異常處理中,爲什麼我們不能只有一個異常並記錄所有錯誤?

try { 

    if (File.Exists(inputFilename)) 
    { 
     // do something 

File.WriteAllText() 
    } 
    else { 
    // do somthing 
    } 

} 

catch (Exception ex) 
{ 

    _eventLog.WriteEntry(ex.Message + "\r\n" + ex.StackTrace, EventLogEntryType.Error); 

} 

感謝

+2

在這裏可能會發生各種各樣的例外情況,您選擇如何處理它們,但是純粹是基於觀點的。 – DavidG

+0

你可能不應該問一個問題,答案是「是」。你如何處理異常處理? – maniak1982

+0

如果你所做的只是登錄異常 - 可以全部捕獲它們。但您也可以根據異常類型採取不同的操作。這是不同的異常類型幫助的地方。 – Evk

回答

2

可這段代碼可以拋出什麼其他異常

你可以看到在function page (MSDN)所有可能的例外:

  • 的ArgumentException
  • 變元tNullException
  • PathTooLongException
  • DirectoryNotFoundException

爲什麼我們不能只是有一個例外,並記錄所有的錯誤

你想捕獲不同類型的例外如果你想以不同的方式處理它。例如:

try 
    { 
     if (File.Exists(inputFilename)) 
     { 
      // do something 
      File.WriteAllText(path, contents); 
     } 
     else 
     { 
      // do somthing 
     } 
    } 
    catch (DirectoryNotFoundException dirNotFoundEx) 
    { 
     MessageBox.Show("Directory does not exist.Try to use diffrent folder."); 
    } 
    catch (Exception ex) 
    { 
     _eventLog.WriteEntry(string.Format("{0}{1}{2}", ex.Message, Environment.NewLine, ex.StackTrace), EventLogEntryType.Error); 
    } 
} 

塊的順序是catch是重要的。 see here