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 exresets the stack trace (so your errors would appear to originate fromHandleException)throwdoesn'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
- 良好实践:如何重用 .csproj 和 .sln 文件来为 CI 创建 2022-01-01
- MoreLinq maxBy vs LINQ max + where 2022-01-01
- 如何用自己压缩一个 IEnumerable 2022-01-01
- Web Api 中的 Swagger .netcore 3.1,使用 swagger UI 设置日期时间格式 2022-01-01
- WebMatrix WebSecurity PasswordSalt 2022-01-01
- 带有服务/守护程序应用程序的 Microsoft Graph CSharp SDK 和 OneDrive for Business - 配额方面返回 null 2022-01-01
- C#MongoDB使用Builders查找派生对象 2022-09-04
- 输入按键事件处理程序 2022-01-01
- 在哪里可以找到使用中的C#/XML文档注释的好例子? 2022-01-01
- C# 中多线程网络服务器的模式 2022-01-01
