哪一个更安全?将“for”放在“尝试”中,或将“Try”放在“for”中

本文关键字:放在 for 或将 Try 尝试 哪一个 安全 | 更新日期: 2023-09-27 18:30:37

我有这段代码,我想知道它们是否同样工作,只是它们的速度不同或它们的行为完全不同?

   try
   {
     for (int i = Start; i < End; i++)
     {
         src.Samples[i].x = i;
         src.Samples[i].y = HR[i];
     }
   }
   catch{}

     for (int i = Start; i < End; i++)
     {
       try
       {
         src.Samples[i].x = i;
         src.Samples[i].y = HR[i];
       }
       catch
       {
         break;
       }
     }

哪一个更安全?将“for”放在“尝试”中,或将“Try”放在“for”中

只是一开始就不要这样做 - 这是对例外的滥用,IMO。编写代码,使其安全,无需尝试/捕获。如果您不知道HR是否足够长,请使用:

int cappedEnd = Math.Min(HR.Length, End);
for (int i = Start; i < cappedEnd; i++)
{
    src.Samples[i].x = i;
    src.Samples[i].y = HR[i];
}

(如果可能无效,请使用类似的逻辑Start

如果你觉得出于某种原因你绝对必须使用 try/catch,我会抓住你期望被扔出的确切类型,并将其放在循环的外侧 - 捕捉只是为了打破对我来说感觉更糟。不,无论哪种方式,我都不会期望有任何显着的性能差异。

主要区别在于,将逻辑封装在 try 语句中将使您能够捕获可能发生的任何错误/异常。

在列出的第二个示例中,您可能会收到异常,因为 Start 和/或 End 由于某种原因成为无效值,或者其他原因导致您无法捕获的崩溃。

请注意,该级别的大多数代码通常非常简单,并且不太容易出错。不过,编写没有异常的代码通常是更好的方法。

如注释中所述,您在第一个示例中需要一个 catch 块才能使其工作。

我希望你是一个初学者(像我一样),所以你期待这样的答案

我再举一个例子。

第一个代码

try{
   foreach(file in files)
   {
     upload(file);
   }
} 
catch(Exception ex)
{
   handleException(ex);
}

第二个代码

  foreach(file in files)
   {
       try{
        upload(file);
       }
       catch(Exception ex)
       {
            handleException(ex);
       }
   }
在第一个代码

上,当第一个代码失败时,所有文件上传都将停止。在第二个,如果一个失败,则处理异常本身,代码继续执行下一次执行。

因此,在您给出的示例中,两者似乎都以相同的方式工作(因为您在 catch 块中给出了中断。其他明智的两者都是不同的)。因此,请尝试在真正需要处理的地方捕获。