TRY块中的异常是否会破坏其执行?

时间:2009-12-08 11:24:04

标签: c# vb.net exception exception-handling try-catch

我正在导入几个字段,即每个导入一个字段的大约25行代码(在我的情况下,实际上没有其他方法)。 它位于try-catch块中,但有时候,这个字段在源代码中不存在,但我必须得到其余的。

从20起 我得到10
第11个不存在(例外) 我还需要12到20岁。

如果我不想逐一测试存在,我想知道尝试是如何工作的。如果发生异常,它不会执行其余的,对吧?什么适合我?

obs:它已超过20种,我想要一种智能且无污染的解决方案。

5 个答案:

答案 0 :(得分:3)

是的,异常会破坏try块 - 这是处理它们的方法 如果你想继续前进,你需要为每个领域尝试/捕获。这并不意味着写20次,远离它,重构你的代码:

  • 添加一个获取字段的函数(作为字符串?)并尝试返回一个值。
  • 创建一个新类并将每个字段定义为对象。
  • 根本不抛出一个exeption - 如果这是常见的情况,请不要抛出异常!在读取值之前添加一个检查。再次,将其移动到一个函数将有所帮助。

答案 1 :(得分:3)

如果try块中发生异常,则异常后不会执行任何操作。因此,如果在项目11上发生异常,则项目12-20将不会被执行。如果有一个finally块,执行将从第11项跳转到catch块,然后跳转到finally块。

根据您的问题所说,当字段不存在时,您会收到异常。我建议检查字段是否存在,然后执行操作。我不建议使用try catch作为检查存在条件的方法。尝试捕获应该用于错误处理,如果确实收到错误,通常不希望继续正常执行。如果你不喜欢在每一行上检查条件的想法,或者除了捕获异常之外没有其他方法来检查它,那么我建议使用try catch来创建一个帮助函数

boolean checkField(field){
  try{/* do operation on field*/}
  catch(Exception e){return false;}
  return true;
}

void main(){
   if !(checkField(field1)) return;
   else if !(checkField(field2)) return;
   .
   .
   .
}

答案 2 :(得分:1)

这是try-catch-finally

我仍然建议检查该字段的存在。这更清洁,更正确。

答案 3 :(得分:1)

循环中的例外情况比批次慢,而不仅仅是检查有效性。

答案 4 :(得分:0)

当try块中发生异常时,它将跳转到catch块(如果没有catch块,它将跳转到finally块,异常将冒出来。所以,代码在try块中,错误发生后将不会执行。

或者:
1)在每次尝试之前检查场的存在 2)将每个单独的字段导入包装在自己的try ... catch

我会选择1),首先防止发生异常。

如果你重构/拆分代码来检查一个字段是否存在于一个单独的可重用方法中,那真的不是那么多。