c# -如何在代码中正确地构建错误处理

本文关键字:正确地 构建 错误 处理 代码 | 更新日期: 2023-09-27 18:03:13

我对编程相当陌生,我想知道什么是正确的方法来构建您的错误处理。我已经搜索了互联网,但我没有找到一些关于你所有的try/catch/finally语句的结构,以及它们是如何相互作用的。

我想展示我的想法,我认为我应该如何在代码中构建我的错误处理,我想邀请每个人检查这是否正确。一个很大的好处是用其他一些研究来支持它,这是某种常见的做法。

所以我这样做的方法是在几乎所有地方都放上try语句!(我希望我的话没有激怒大家)。PS -我也理解捕捉不同类型的异常,我只捕捉类型的"异常"只是为了解释的目的。

例如:

  1. 我在一个正常的控制台应用程序中启动Main,然后创建一个

  2. 然后在其上调用一个名为AMethod1 (a.AMethod1)的成员函数。

  3. 。AMethod1创建类B的实例,然后调用BMethod1(b.BMethod1)。

我将如何处理错误:

    public class Program
    {
       static void Main (string[] args)
       {
          //I do not place simple code like below inside the try statement, 
          //because it is unnecessary and will slow the process down.
          //Is this correct?
          const int importantNumber = 45;
          string name;
          IRepositoryFactory repoFactory;
          A a; 
          //And then I put code in 'try' where I feel it may go wrong.
          try
          {
             a = new A();
             a.AMethod1();
             //Some other code    
          }
          catch (Exception ex)
          {
             HandleError(ex);
          }
       }
    } 
    // End of scope of Program! The functions below belong to their relative 
    // classes.
    public void AMethod1()
    {
       try
       { 
          B b = new B();
          b.BMethod1(); 
       }
       catch (Exception ex)
       { 
          //Preserving the original exception and giving more detailed feedback.
          //Is this correct?
          //Alternative - you still could do a normal 'throw' like in BMethod1.
          throw new Exception("Something failed", ex); 
       }
    }
    public void BMethod1()
    {
       try
       { 
          //some code 
       }
       catch (Exception ex)
       { 
          throw; //So I don't lose stack trace - Is this correct?
       }
    }
  1. 我把所有的代码放在try语句中(除了如下所示的声明)以上代码)
  2. 在客户端级别(在调用堆栈的开始处)捕获错误并处理它。
  3. 往下看调用堆栈,我只是抛出异常,这样我就不会破坏堆栈信息。

我真的很感激一些解释程序员应该如何构建他们的错误处理的资源。请不要忘记阅读代码中的注释

c# -如何在代码中正确地构建错误处理

以下是一些很好的经验法则:

  1. 如果你要在有问题的级别记录错误,使用异常处理
  2. 如果有解决异常的方法,使用异常处理
  3. 否则,不要在该级别添加任何异常处理

上述规则的例外是UI应该总是(好吧,也许不是总是,但我不能马上想到这个规则的例外)有异常处理。

一般来说,如果抛出了与代码中相同的错误,则表示不应该处理该异常。故事到此结束

注意:当我说"在那个级别"时,我指的是在单个类或方法中。除非异常处理增加了值,否则不要包含它。它总是在用户界面层面增加价值,因为用户不必看到你的脏衣服,一个消息说"哎呀,洗衣日"就足够了。

根据我的个人经验,大多数异常都与空对象引用有关。我倾向于遵循null对象模式,以避免对空值进行大量检查。而且在做值转换时,我总是使用tryparse,这样我就不会出现null问题。总之,这个问题可以从许多角度来讨论。如果你能说得更具体一点,回答起来就容易多了。

stackoverflow真的不是一个意见网站。它主要是针对特定问题的特定答案。

但是您应该知道try...catch确实有一些与之相关的开销。把它放在"任何地方"会损害代码的性能。

仅用于包装可能出现意外错误的代码,例如写入磁盘。

还要注意,"正确"的方法取决于你如何处理这些错误。您是否记录它们、向用户报告它们、将它们传播给调用者?