【问题标题】:Which one is Safer? Putting An "for" in a "Try" , or putting a "Try" in An "for"?哪个更安全?将“for”放在“Try”中,还是将“Try”放在“for”中?
【发布时间】:2014-11-15 10:05:22
【问题描述】:

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

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

【问题讨论】:

  • 好吧,您的第一个甚至无效,因为您没有 catch 块。您希望捕获哪些异常,如果它们被抛出,您希望发生什么?
  • 我没有写catch,因为让问题更短我在编辑中添加了它,我希望程序在“i”通过 HR 数组的长度时继续运行

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


【解决方案1】:

只是不要一开始就这样做 - 这是对例外的滥用,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,我会抓住你期望被抛出的 exact 类型,并把它在循环的外部——为了打破而抓捕对我来说感觉更糟。不,我预计这两种方式都不会有任何显着的性能差异。

【讨论】:

  • 谢谢,亲爱的朋友们投票赞成这个答案,尽管答案很简单,但我认为它很聪明。抱歉,我的代表很低,无法投票
【解决方案2】:

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

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

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

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

【讨论】:

  • 只要能帮到你就满意了。有见地的问题很适合提出,并且会大大提高您对编程语言和概念的理解。
【解决方案3】:

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

我再举一个例子。

第一个代码

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 块中给出了中断。否则,两者都是不同的)。所以在真正需要处理的地方使用 try catch。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-13
    • 2010-10-06
    • 1970-01-01
    • 2022-01-13
    • 1970-01-01
    • 2017-09-10
    • 2021-08-05
    • 2016-06-25
    相关资源
    最近更新 更多