c# -如何在代码中正确地构建错误处理
本文关键字:正确地 构建 错误 处理 代码 | 更新日期: 2023-09-27 18:03:13
我对编程相当陌生,我想知道什么是正确的方法来构建您的错误处理。我已经搜索了互联网,但我没有找到一些关于你所有的try/catch/finally语句的结构,以及它们是如何相互作用的。
我想展示我的想法,我认为我应该如何在代码中构建我的错误处理,我想邀请每个人检查这是否正确。一个很大的好处是用其他一些研究来支持它,这是某种常见的做法。
所以我这样做的方法是在几乎所有地方都放上try语句!(我希望我的话没有激怒大家)。PS -我也理解捕捉不同类型的异常,我只捕捉类型的"异常"只是为了解释的目的。例如:
我在一个正常的控制台应用程序中启动Main,然后创建一个
然后在其上调用一个名为AMethod1 (a.AMethod1)的成员函数。
。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?
}
}
- 我把所有的代码放在try语句中(除了如下所示的声明)以上代码)
- 在客户端级别(在调用堆栈的开始处)捕获错误并处理它。
- 往下看调用堆栈,我只是抛出异常,这样我就不会破坏堆栈信息。
我真的很感激一些解释程序员应该如何构建他们的错误处理的资源。请不要忘记阅读代码中的注释
以下是一些很好的经验法则:
- 如果你要在有问题的级别记录错误,使用异常处理
- 如果有解决异常的方法,使用异常处理 否则,不要在该级别添加任何异常处理
上述规则的例外是UI应该总是(好吧,也许不是总是,但我不能马上想到这个规则的例外)有异常处理。
一般来说,如果抛出了与代码中相同的错误,则表示不应该处理该异常。故事到此结束
注意:当我说"在那个级别"时,我指的是在单个类或方法中。除非异常处理增加了值,否则不要包含它。它总是在用户界面层面增加价值,因为用户不必看到你的脏衣服,一个消息说"哎呀,洗衣日"就足够了。
根据我的个人经验,大多数异常都与空对象引用有关。我倾向于遵循null对象模式,以避免对空值进行大量检查。而且在做值转换时,我总是使用tryparse,这样我就不会出现null问题。总之,这个问题可以从许多角度来讨论。如果你能说得更具体一点,回答起来就容易多了。
stackoverflow真的不是一个意见网站。它主要是针对特定问题的特定答案。
但是您应该知道try...catch
确实有一些与之相关的开销。把它放在"任何地方"会损害代码的性能。
仅用于包装可能出现意外错误的代码,例如写入磁盘。
还要注意,"正确"的方法取决于你如何处理这些错误。您是否记录它们、向用户报告它们、将它们传播给调用者?