Is there a difference between quot;throwquot; and quot;throw exquot;?(“投掷和“投掷有区别吗?和“扔前?)
问题描述
有一些帖子询问这两者之间的区别是什么.
(我为什么还要提这个……)
There are some posts that asks what the difference between those two are already.
(why do I have to even mention this...)
但我的问题有所不同,我在另一个错误上帝般处理方法中调用throw ex".
But my question is different in a way that I am calling "throw ex" in another error god-like handling method.
public class Program {
public static void Main(string[] args) {
try {
// something
} catch (Exception ex) {
HandleException(ex);
}
}
private static void HandleException(Exception ex) {
if (ex is ThreadAbortException) {
// ignore then,
return;
}
if (ex is ArgumentOutOfRangeException) {
// Log then,
throw ex;
}
if (ex is InvalidOperationException) {
// Show message then,
throw ex;
}
// and so on.
}
}
如果 尝试 &在
,然后我将使用 Main
中使用了 catchthrow;
重新抛出错误.但是在上面的简化代码中,所有的异常都经过HandleException
If try & catch
were used in the Main
, then I would use throw;
to rethrow the error.
But in the above simplied code, all exceptions go through HandleException
throw ex;
在 HandleException
内部调用时是否与调用 throw
效果相同?
Does throw ex;
has the same effect as calling throw
when called inside HandleException
?
推荐答案
是的,有区别;
throw ex
重置堆栈跟踪(因此您的错误似乎源自HandleException
)throw
不会 - 原始违规者将被保留.
throw ex
resets the stack trace (so your errors would appear to originate fromHandleException
)throw
doesn't - the original offender would be preserved.
static void Main(string[] args)
{
try
{
Method2();
}
catch (Exception ex)
{
Console.Write(ex.StackTrace.ToString());
Console.ReadKey();
}
}
private static void Method2()
{
try
{
Method1();
}
catch (Exception ex)
{
//throw ex resets the stack trace Coming from Method 1 and propogates it to the caller(Main)
throw ex;
}
}
private static void Method1()
{
try
{
throw new Exception("Inside Method1");
}
catch (Exception)
{
throw;
}
}
这篇关于“投掷"和“投掷"有区别吗?和“扔前"?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:“投掷"和“投掷"有区别吗?和“扔前&qu
基础教程推荐
- 为什么Flurl.Http DownloadFileAsync/Http客户端GetAsync需要 2022-09-30
- 将 XML 转换为通用列表 2022-01-01
- c# Math.Sqrt 实现 2022-01-01
- rabbitmq 的 REST API 2022-01-01
- 如何在 IDE 中获取 Xamarin Studio C# 输出? 2022-01-01
- 如何激活MC67中的红灯 2022-01-01
- SSE 浮点算术是否可重现? 2022-01-01
- 将 Office 安装到 Windows 容器 (servercore:ltsc2019) 失败,错误代码为 17002 2022-01-01
- 有没有办法忽略 2GB 文件上传的 maxRequestLength 限制? 2022-01-01
- MS Visual Studio .NET 的替代品 2022-01-01