我一直在努力寻找这个问题的答案 - 两者之间有什么关系?
try
{
//Do Something
}
catch
{
throw;
}
VS
try
{
//Do Something
}
catch
{
}
或
try
{
//Do Something
}
catch (Exception Ex)
{
//Do something with Exception Ex
}
答案 0 :(得分:5)
答案 1 :(得分:4)
catch - > throw实际上只会抛出你的错误,所以你必须在其他地方捕获它。如果您想先捕获一些内容然后将错误抛给上面的其他方法,这可能很有用。
示例:
try
{
// do something
}
catch
{
Console.WriteLine("Something went wrong, and you'll know it");
throw;
}
// won't get here anymore, the exception was thrown.
尝试 - > catch会让你忽略错误。
try
{
// do something
}
catch
{
Console.WriteLine("Something went wrong, and you won't know it.");
}
// continuing happily
答案 2 :(得分:2)
第一个重新抛出相同的异常。第二个吞下异常就像它从未发生过一样。所以这取决于你需要什么。
请注意 IS 这两者之间存在差异:
try
{
//Do Something
}
catch (Exception Ex)
{
//re-throws the same exception that was caught
throw;
}
try
{
//Do Something
}
catch (Exception Ex)
{
//throws a _new_ exception containing Ex
throw Ex;
}
答案 3 :(得分:1)
首先,你只是重新抛出异常。在这种情况下,您不需要try / catch,因为您没有对捕获的异常做任何事情。
在第二种情况下,你吞下所有例外情况。这非常危险。不要这样做。它永远不会是正确的。
最后,你还没有给我们足够的细节知道。您正在捕获异常,并且可能会对其执行某些操作。你可以重新抛出,你可以吞下去。你还没有告诉我们。
答案 4 :(得分:1)
在第一个块中,第一个块的处理程序内部再次抛出异常。这意味着它可以被外部try / catch范围块拾取。第二个块“占用”catch块中的异常,并且在执行catch块中的代码后,程序执行可以正常继续。
答案 5 :(得分:1)
在第一种情况下,异常被重新抛出给调用者。这个版本没有意义,因为你没有对异常做任何事情,但实际上你可以做一些事情,然后将异常抛给调用者。在过滤异常时(例如
),它也很有用try
{
//do somethign
}
catch(Exception1)
{
throw;
}
catch
{
//do something
}
第二个是你永远不应该做的事情。您正在覆盖异常,并且更难以捕获应用程序中的最终错误。您需要以有意义的方式处理异常或让它破坏程序(或让调用者处理它)
第三个例子是简单的异常处理。确保不要将其用作if / else(流控制)
的形式