在这种情况下最终执行了吗?我写了这段代码,无法决定最终是否真的在这种情况下执行。无论答案是什么,我都会想要一些解释。
foreach(string s in allStrings)
{
try
{
//Error happens here
}
catch(Exception ex)
{
//Handle exception
break;
}
finally
{
//Clean up code
}
}
答案 0 :(得分:8)
是。最后,当控件离开相应的try或catch块时,始终执行块。 (除非发生超级特殊事件,例如运行时崩溃或线程被中止。)
答案 1 :(得分:7)
您已经编写了90%的代码,您需要自己回答这个问题。
继续写作。
答案 2 :(得分:2)
实际上,最后总是调用块。这就是他们这样命名的原因......
答案 3 :(得分:2)
根据马特的回答。这确实是一种过度杀伤力。
我建议做这样的事情,并确保测试通过。 MSTest不是最好的测试库,但它是“标准”:)
[TestClass()]
public class FinalClauseTester
{
private TestContext testContextInstance;
public TestContext TestContext
{
get
{
return testContextInstance;
}
set
{
testContextInstance = value;
}
}
[TestMethod]
[DeploymentItem(@"Something right goes here.")]
[DataSource("Something else goes here", "row", somethingOtherSetupCrap)]
public void TestFinalClause()
{
string[] allStrings = {"1", "2", "3", "4", "5"};
int yesCount = 0;
foreach(string s in allStrings)
{
try
{
//Error happens here
throw new Exception();
}
catch(Exception ex)
{
//Handle exception
if (yesCount == 3)
{
break;
}
}
finally
{
//Clean up code
yesCount++;
}
}
// And, at the end of this loop ...
Debug.Assert(yesCount = 3); // Or something like this.
}
}
答案 4 :(得分:1)
答案 5 :(得分:1)
是的,它尝试try,然后catch捕获异常,然后最后是正常执行和捕获异常的最终调用。我觉得隐藏在某个地方有一种诙谐的想法!