我对编程很新,我想知道构造错误处理的正确方法是什么。我搜索了互联网,但是我没有找到关于所有try / catch / finally语句的结构以及它们如何相互交互的可靠内容。
我想提出我的想法,我认为我应该在代码中构建我的错误处理,我想邀请所有人检查这是否正确。一个很大的好处是用其他一些研究来支持它,这是一种常见的做法。
所以我这样做的方法就是将try语句放在各处! (我希望通过这样说,我没有激怒所有人)。 PS - 我也理解捕获不同类型的异常,我只是为了解释目的而只捕获“异常”类型。
例如:
我在普通的控制台应用程序中启动Main,然后创建一个 A.的实例
然后我调用了一个名为AMethod1的成员函数(a.AMethod1)。
A.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?
}
}
总结:
我真的很感激一些解释程序员如何构建错误处理的资源。请不要忘记阅读代码中的注释。
答案 0 :(得分:1)
以下是一些好的经验法则:
以上规则的例外情况是UI应该总是(好吧,也许并不总是,但我不能想到这个规则的例外),有异常处理。
通常,如果您在代码中抛出相同的错误,则表明您不应该处理异常。故事结束。
注意:当我说“在那个级别”时,我的意思是在个别班级或方法中。除非异常处理是增加值,否则不要包含它。它总是在用户界面级别增加价值,因为用户不必看到你的脏衣服,一条消息说“哎呀,洗衣日”就够了。
答案 1 :(得分:0)
根据我的个人经验,大多数异常与空对象引用有关。我倾向于遵循空对象模式以避免大量检查空值。而且在进行值转换时,我总是使用tryparse,这样我就不会有空问题的机会。总而言之,这个问题可以从很多方面进行讨论。如果你可以更具体一点,那将很容易回答。
答案 2 :(得分:-2)
stackoverflow真的不是一个意见网站。它特别针对具体问题的具体答案。
但是你应该知道try...catch
确实有一些与之相关的开销。把它放在任何地方"会损害你的代码的性能。
只需使用它来包装容易出现意外错误的代码,例如写入磁盘。
另请注意"正确"方式取决于你对这些错误的处理方式。您是否正在记录它们,将它们报告给用户,并将它们传播给呼叫者?这只是取决于。