C# 在循环中时在何处捕获异常?
嗨, 我想知道您对异常处理的看法,即我有一个方法:C# 在循环中时在何处捕获异常?,c#,exception-handling,C#,Exception Handling,嗨, 我想知道您对异常处理的看法,即我有一个方法: public void Method{} { for (int i=0;i < length ) { // dosomething that may case exception ... ... // rest of the code } } public void方法{} { 对于(int i=0;i
public void Method{}
{
for (int i=0;i < length )
{
// dosomething that may case exception
...
...
// rest of the code
}
}
public void方法{}
{
对于(int i=0;i
我应该添加try-catch块来处理整个循环的异常,还是只添加最易受攻击的代码,或者其他什么?
最佳实践是什么?我的首选是使异常处理尽可能接近引发异常的代码。这将为您提供最佳堆栈跟踪。我会把它放在循环里。YMMV取决于你在做什么 如果您计划在出现异常时继续迭代,那么自然会将try-catch块放入for中 如果您想在发生错误时停止操作,更好的方法是将for放入try-catch块
for (int i = 0; i < 10000000; i++) {
try {
}catch (Exception e) {
}
}
for(int i=0;i<10000000;i++){
试一试{
}捕获(例外e){
}
}
持续时间16毫秒
try {
for (int i = 0; i < 10000000; i++) {
}
}catch (Exception e) {
}
试试看{
对于(int i=0;i<10000000;i++){
}
}捕获(例外e){
}
持续时间0毫秒。这取决于您希望代码如何流动
例如,即使一个元素抛出异常,循环是否应该继续执行?如果是这样,那么您希望在for中尝试/捕获。如果不是,那么你希望你的尝试/抓住机会。答案是在你想要/能够处理它的水平上。若一个元素的处理可能失败,但您可以继续处理,则使用try-catch-inside循环。如果可能发生错误并且无法继续,则使用外部try catch。可以识别为有问题的行越少越好。然后你应该把它们放在try-catch块中。这要看情况而定 如果在任何单个元素上遇到异常,是否要继续处理元素?然后在循环中处理异常
如果出现异常,是否希望循环处理停止?然后在循环外部处理异常。查看异常是否完全重复。通常,异常发生的地方并不是程序准备好处理的地方。