哪个更安全?将"放入"在"尝试"或者放一个"试试"在An" for"?

时间:2014-11-15 10:05:23

标签: c# performance if-statement try-catch

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

   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;
       }
     }

3 个答案:

答案 0 :(得分:5)

只是不要这样做 - 这是滥用例外,IMO。编写代码使其安全没有 try / catch。如果您不知道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由于某种原因,我会抓住你期望被抛出的完全类型,然后把它放进去在循环的外面 - 抓住只是为了让我觉得更糟糕。不,我不希望任何重大的性能差异。

答案 1 :(得分:0)

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

在你列出的第二个例子中,你可能会因为某种原因导致无效值或者其他导致你无法捕获的崩溃而获得异常。

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

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

答案 2 :(得分:0)

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

我会告诉另一个例子。

第一个代码

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

第二个代码

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

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

所以在你给出的两个例子看起来像是以同样的方式工作(因为你在catch块中给出了中断。其他两者都是不同的)。所以使用try catch它真正需要处理的地方。