簡體   English   中英

將錯誤消息處理為異常

[英]Handling error messages as exceptions

我們可以在一個類中拋出異常嗎?我們可以在c#的單獨異常類中捕獲所有這些異常嗎?

現在我的問題是,當值== null時,我們就會在那里顯示消息。 現在,如果值等於null,我必須使用異常。 我可以拋出異常嗎?

if(customer == null)
        throw new CustomerNullException();
if(incometype == null)
        throw new IncomeTypeNullException();

現在我可以在一個單獨的類中處理這些異常嗎?

你不應該拋出異常作為常規流程。 特別是如果你知道它在哪里以及為什么會發生。 在你的情況下,我將創建一個名為HandleProblems的類,並將錯誤發送到該類。 不需要拋出異常並捕獲它,因為它比調用方法更昂貴。

   public class Log
   {
      public static void WriteLine(string errorMsg)
      {
         string err = DateTime.Now.ToString("dd/MM/yyyy hh:mm") + " - " + errorMsg;

         if (File.Exists("@d:\log.txt") == false)
         {
            File.Create("@d:\log.txt");
         }

         using(StreamWriter writer = new StreamWriter("@d:\log.txt", true))
         {
            writer.WriteLine(err);
         }
      }
   }

處理錯誤的例外情況非常糟糕。 您應該重新考慮錯誤處理架構,因為異常會產生巨大的開銷。 請閱讀Jon Skeet的Exceptions and Performance

只有特殊情況才能保存例外(haw haw haw)。 由於異常保存和傳遞的元數據(包括堆棧跟蹤),它們的性能非常高。 因此,雖然他們必須調試,捕獲並處理您通常不會遇到的錯誤(但應該做好准備,例如,如果參數傳遞為null,'應該'永遠不會為null),他們不適合計划的正常運作。

如果您希望在正常的程序功能中出現特殊錯誤情況,請在外部使用您自己的錯誤處理程序類,將所需的錯誤參數傳遞給,或使用某種驗證。 在空數據結構上執行類似myCollection.pop的操作不需要拋出異常,因為(無論出於何種原因)您的程序可能無法檢查集合是否為空。 但是它可以執行類似返回Null和調用errorHandler類的操作,以便在數據結構為空時執行任何操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM