3

我们可以在一个类中抛出异常吗?我们可以在 c# 中的一个单独的异常类中捕获所有这些异常吗?

现在我的问题是,当值 == null 时,我们会在那里显示消息本身。现在,如果值等于 null,我必须使用异常。我可以抛出异常吗

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

现在我可以在单独的类中处理这些异常吗?

4

3 回答 3

0

只有在特殊情况下才应保存异常(haw haw haw)。由于异常保存和传递的元数据(包括堆栈跟踪),它们的性能非常密集。因此,虽然它们很好地必须调试、捕获和处理您通常不会遇到的错误(但应该做好准备,比如如果参数作为 null 传递,则“不应该”为 null),它们不适合程序的正常运行。

如果您希望在正常程序运行中出现特殊错误情况,请在外部使用您自己的错误处理程序类,将所需的错误参数传递给该类,或使用某种验证。对空数据结构执行类似myCollection.pop操作不需要引发异常,因为(无论出于何种原因)您的程序可能不会检查集合是否为空。但是,它可以执行诸如返回 Null 并调用您的 errorHandler 类之类的操作,以在数据结构为空时执行所需的任何操作。

于 2013-08-28T16:08:10.593 回答
0

您不应该将异常作为常规流程抛出。特别是如果你知道它发生在哪里以及为什么发生。在你的情况下,我会创建一个名为的类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);
         }
      }
   }
于 2013-08-28T14:10:51.467 回答
0

异常对于处理错误来说确实是个坏主意。您应该重新考虑您的错误处理架构,因为异常会产生巨大的开销。请阅读Jon Skeet 的Exceptions and Performance

于 2013-08-28T14:14:11.767 回答