C# Try/Catch-返回原始Try
让我们看看这个简单的try/catch示例C# Try/Catch-返回原始Try,c#,exception-handling,try-catch,C#,Exception Handling,Try Catch,让我们看看这个简单的try/catch示例 try { // User inputs path of a file if(!ValidPath) throw new InvalidPathException(); } catch InvalidPathException e { // Log error // Re-throw the error. throw; } 两个问题。这两个答案可能都很简单 抛接球是否会返回并检查下一个
try
{
// User inputs path of a file
if(!ValidPath)
throw new InvalidPathException();
}
catch InvalidPathException e
{
// Log error
// Re-throw the error.
throw;
}
两个问题。这两个答案可能都很简单
每个try块可以有多个捕捉,但只能使用一个捕捉。它将捕获最接近的异常。如果您随后抛出异常,它将完全离开这个try块,并且只有周围的catch能够处理rethrown异常
public delegate void VoidDelegate();
public static class Utils
{
public static void Try(VoidDelegate v) {
try {
v();
}
catch {}
}
}
Utils.Try( () => WidgetMaker.SetAlignment(57) );
Utils.Try( () => arrayname["Title"] = txtTitle.Text );
Utils.Try( () => objectname.Season(true, false) );
Utils.Try( () => (Session["CasseroleTracker"]).Seasoned = true );
另一种方法是使用
GOTO语句:
参考文献2:
另一种方法是在错误恢复下一步时使用
参考文献3:
)() 您可以更清楚地了解“下一个”catch块是什么。使用goto
语句从外部输入块(例如try
block)实际上是非法的。因此,这不仅仅是一个糟糕的编程实践。修改代码流不是不可能的,而是非常不切实际的,所以是的,你是对的。嗯。。。您可以在(条件){try{do stuff}catch(){}}
时执行类似于的操作,但是您需要小心不要进入无限循环。虽然不是“try-catch-retry”,但您可以到达那里。您不能从块外转到try块内的标签。On Error是Visual Basic。@recursive:您可以从同一捕获转到try块内的标签。你不了解问题和我的答案,也不知道细节。检查这本实际手册:您提供的是一个指向有关Visual Basic而不是C#的文档的链接。我真的试过了。编译时错误消息如下:goto语句范围内没有这样的标签“asdf”。
var anyway = true;
while(anyway)
{
try
{
do somthing
...
...
...
if no errors anyway = false
}
catch
{
somthing wrong!
}
}